`
dengzhangtao
  • 浏览: 677226 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

系统开发--最近使用到的

阅读更多
putty ssh(linux客户端)
源码镜像 服务器: 192.168.247.70
帐号密码:hiapk/12121212

repo init -u git://192.168.247.70/cm/CyanogenMod/android.git -b cm-10.1
repo sync

git clone git://192.168.247.70/cm/CyanogenMod/android.git -b cm-10.1


镜像同步时不会同步devices文件下的,
要同步的化  
在源码的.repo下新建manifest.xml
vi manifest.xml
mv local_manifest.xml.bak  local_manifest.xml
vi local_manifest.xml
增加<project name="CyanogenMod/android_device_samsung_maguro" path="device/samsung/maguro" remote="github"
repo
搞定

#set java environment 
export JAVA_HOME=/home/dengzt/下载/jdk1.6.0_20
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib 
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin 

/etc/profile
#set NDK env
export NDK_HOME=/home/dengzt/android/android-ndk-r8d
export PATH=$NDK_HOME:$PATH

export PATH=/home/dengzt/android/android-sdk-linux/platform-tools/:$PATH
NDK_ROOT=/home/dengzt/android/android-ndk-r8d/
export NDK_ROOT

软件:
putty
geany
dock
sqlite
meld diff
gitg

在编译cm-10.1时候,Term.apk出错,因为Term.apk是cm不开源的
解决:
进入 /vendor/cm$  ./get-prebuilts
,
手机刷到4.2后,总是adb shell 出现,device offine,
解决: 更新android-sdk  的tools, ,操作:运行tools下的android。

根据Android启动过程的来裁剪:
。  定制本地服务
。  定制Android系统服务
。  优化ZygoteInit的类预加载preloadClasses和资源预加载preloadResources机制
。  PackageManagerService扫描、检查APK安装包信息

-----------裁剪记录:

一,定制本地服务
修改/system/core/rootdir/init.rc
1,去掉电话模块
# modify by dengzt 2013,8,28
#service ril-daemon /system/bin/rild
#    class main
#    socket rild stream 660 root radio
#    socket rild-debug stream 660 radio system
#    user root
#   group radio cache inet misc audio sdcard_r sdcard_rw log
2,系统调试
# modify by dengzt 2013.11.14
#service debuggerd /system/bin/debuggerd
#    class main
3 蓝牙
#service bluetoothd /system/bin/bluetoothd -n
#    class main
#    socket bluetooth stream 660 bluetooth bluetooth
#    socket dbus_bluetooth stream 660 bluetooth bluetooth
    # init.rc does not yet support applying capabilities, so run as root and
    # let bluetoothd drop uid to bluetooth with the right linux capabilities
#    group bluetooth net_bt_admin misc
#    disabled



init.rc启动了服务zygote,而ZygoteInit启动了systemServer,所有zygote服务不能整个去掉
/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
服务zygote的装载一千多个类和初始化堆栈的过程,用了20秒左右。
ZygoteInit.java的preloadClasses加载了1千多个类。。
/frameworks/base/preloaded-classes
虽然preloaded-classes是在下载源码的时候已经确定了的,也就是对我们来说WritePreloadedClassFile类是没用到的,我们可以做的就是在preloaded-classes文件中,把不预装载的类去掉,试了把所有类去掉,启动确实很快跳过那个地方,但是启动HOME的时候就会很慢了
裁剪文件preloaded-classes:暂时全部清空



另一个是扫描
/system/app,
/system/framework,
/data/app,
/data/app-private.
这几个目录下面的package用了大概10秒,所以我们重点能够修理的就是这两个老大的。

我这里先不修改扫描的方法,只要把系统应用裁剪了就好了。。我裁剪到了10几个

二,定制Android系统服务SystemServer.java

1,去掉电话服务
//ServiceManager.addService("telephony.registry", new TelephonyRegistry(context));

2,去掉震动服务
//modify by dengzt 2013,8,28
//Slog.i(TAG, "Vibrator Service");
//vibrator = new VibratorService(context);
//ServiceManager.addService("vibrator", vibrator);

其他的有待裁剪

三,裁剪系统应用
只保留了10几个:
am335x.apk工厂测试(这个放在data/app/下,不做为系统应用)
ApplicationsProvider.apk这个暂时不知道是什么
Browser.apk
FileManager.apk
Gallery2.apk
Launcher2.apk
MediaProvider.apk
PackageInstall.apk
PinyinIME.apk
Settings.apk
SettingsProvider.apk
SoundRecorder.apk
SystemUI.apk
DefaultContainerService.apk
DrmProvider.apk
UserDictionaryProvider.apk

=================
1在Settings,增加工厂测试到launcher,方便测试开发测试程序
<activity android:name="TestingSettings" android:label="@string/testing">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />  //add
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
</activity>

2修改MasterClear.java ,恢复出厂设置,改为重启到recovery模式
  PowerManager pm = (PowerManager)getActivity(). getSystemService(Context.POWER_SERVICE);
              pm.reboot("recovery");
3,锁屏修改成全屏:
LockScreen.java的
@Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        if (LockPatternKeyguardView.DEBUG_CONFIGURATION) {
            Log.v(TAG, "***** LOCK ATTACHED TO WINDOW");
            Log.v(TAG, "Cur orient=" + mCreationOrientation
                    + ", new config=" + getResources().getConfiguration());
        }
        updateConfiguration();
        this.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);//mod by  dengzt 2013 9.17
    }
4,修改默认语言为中文
在out/产品/ 修改system.prop和system下的build.prop增加
# modif by dengzt 2013.11.12
persist.sys.language=zh #这里是我添加上去的
persist.sys.country=CN
persist.sys.localevar=
persist.sys.timezone=Asia/Beijing #原版是shanghai
ro.product.locale.language=zh
ro.product.locale.region=CN
# modif end

或者在编译前:
在/build/target/product/core.mk下
    PRODUCT_PROPERTY_OVERRIDES := \  
        ro.config.notification_sound=OnTheHunt.ogg \  
        ro.config.alarm_alert=Alarm_Classic.ogga \  
        persist.sys.language=zh \增加的
        persist.sys.country=CN

四,破解系统的root权限
修改文件/system/extra/su/su.c
1. /*if (myuid != AID_ROOT && myuid != AID_SHELL) {
        fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
        return 1;
    }*/
2.在init.rc增加权限
#add by dengzt 2013.11.15
chmod 4755 /system/xbin/su
编译make su TARGET_PRODUCT=am335xevm 生成新的su可执行文件,替换/system/xbin/下
亲测可行了。。。。

其他注意:
1在我的工厂测试应用里用到了so库,如果当作系统应用的话,会找不到so库,需要放在系统的制定目录下。

编译文件系统之前,设置下内核编译,貌似会影响到文件系统的编译
编译内核,原来内核对性能也很关键,先设置
cd kernel
make ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig

出现蓝色框框
选kernel features-->preemption model-->Preemptible Kernel (Low-Latency Desktop)
Exc Exc两下返回,退出,save



dos:
使用ftp上传到服务器
ftp 172.16.20.25
ftp>user caizf
ftp>startp1

使用lcd命令设置ubuntu下文件接收位置

ftp>lcd /home/glorin/work/linux

ftp>cd /tmp
ftp>put android_rootfs_tar.gz
-------------------------------------
SecureCRT中:
开一个TeInet ,端23
账号密码caizf ,startp1

常用命令:
android板,串口,网卡ok后,加载网络文件系统
开机回车,
pr
run netboot
root
pwd
cd /


解压tar xvzf /tmp/android_rootfs_0.tar.gz -C .
mkdir dzt_rootfs

cp nand-rootfs.20131223/* /mnt/cf/ -af
df
sync

logcat *:w
ping -c 1 -w 1 172.16.3.162

setenv bootfile uImage.3rd.desktop3

cd kernel
make menuconfig
make clean
make kernel.img

cd 目录
在该目录下搜索
grep kkk  *




在nfs上加载nand分区命令
1. ubiattach /dev/ubi_ctrl -m 7 -O 2048
2. mount -t ubifs ubi0:rootfs /mnt/cf/
卸载nand分区命令
1.umount /mnt/cf/
2. ubidetach /dev/ubi_ctrl -m 7


BT/FM/GPS would be unavailable on system
I/SurfaceFlinger(  331): SurfaceFlinger is starting
I/SurfaceFlinger(  331): SurfaceFlinger's main thread

ready to run. Initializing graphics H/W...
E/FramebufferNativeWindow(  331): couldn't open

framebuffer HAL (Not a typewriter)
E/FramebufferNativeWindow(  331): couldn't open gralloc

HAL (Not a typewriter)
E/SurfaceFlinger(  331): Display subsystem failed to

initialize. check logs. exiting...

pr
setenv serverip 172.16.3.162
saveenv
setenv rootpath /nfsroot/linux_rootfs
setenv bootfile uImage.3rd.gt_rst

nand erase 0x280000 0x3a0000

cp config.am335x.3rd .config

Settings.Secure.putString(getContentResolver(),

Settings.Secure.TTS_DEFAULT_SYNTH, "com.iflytek.tts");
engine:包名com.ik.xx

adb shell
cat /proc/cpuinfo

烧写内核:
setenv bootfile uImage.3rd.desktop3
dhcp
擦出nandflash
nand erase 0x280000 0x400000
nand write 0x80007fc0 0x280000 0x400000

nand write srcaddr destaddr size



1、  去除休眠

frameworks/base/packages/SettingsProvider/res/values/de

faults.xml


里<integer

name="def_screen_off_timeout">60000</integer>

60000ms,修改为-1。-1代表0xffffffff,等于永远不要休眠了

2、  去除锁屏

Frameworks/base/policy/src/com/android/internal/policy/

impl/KeyguardViewMediator.java

/热插拔usb和sdcard
在system/etc/vold.fstab
dev_mount sdcard /storage/sdcard0 3

/devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0
其中的3改成auto,既自动挂载。

WindowManagerService
PowerManagerService
ActivityManagerService
PackgeManagerService

本地服务的zygote在init.rc启动
这个zygote进程要执行的程序是/system/bin/app_process
源码在app_main.cpp
开始android运行环境


在init.am335xevm.rc 中加入开机自动加载ko模块
on boot
# Default Read Ahead value for sdcards
    write /sys/block/mmcblk0/queue/read_ahead_kb 2048

# wi-fi
    mkdir /data/misc/wifi/sockets 0770 wifi wifi
    mkdir /data/misc/dhcp 0770 dhcp dhcp
    insmod /system/lib/modules/compat.ko
    insmod /system/lib/modules/cfg80211.ko
    insmod /system/lib/modules/mac80211.ko
    insmod /system/lib/modules/wlcore.ko
    insmod /system/lib/modules/wl12xx.ko
    insmod /system/lib/modules/wl18xx.ko

    chmod 0770 /system/lib/modules/destroy.ko
    insmod /system/lib/modules/destroy.ko

如果想定义defaults.xml中没有的,在这里添加后,需修改frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java,加入自己的存储代码。

读、写、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,rw-r--r--用数字表示成644。

快速打包system.img----- make snod

网络adb
busybox ifconfig eth0
setprop service.adb.tcp.port 5555
stop adbd
start adbd

adb connect 172.16.20.9:5555

mkdir
mount -o remount,rw rootfs /
mount -o remount,rw ubi1_0 /system
chmod 777 /system/bin/vold

系统权限是没权限访问sdcard的。

去掉init.am335x.rc 中的uim服务。

系统应用也可以安装到/data/app/
修改chmod 777 /storage  可以访问sdcard了

去掉init.am335x.rc 中的uim服务。

系统应用也可以安装到/data/app/
修改chmod 777 /storage  可以访问sdcard了

ipconfig /flushdns 手动清dns

不能直接烧out下面的system.img
因为格式不是ext3,开机会出现挂载不了system

使用system应用asset.apk来实现 预安装
在asset.apk修改后缀名rar后,打开增加删除assets目录的apk来实现自动安装
分享到:
评论

相关推荐

    Laravel开发-mysql-dump

    `mysql-dump`允许设置不同的备份策略,比如基于时间的保留(例如只保留最近7天的备份),这有助于保持存储空间的合理使用。通过调整配置,可以定制化备份的频率、保留周期和压缩级别,以适应项目的需求。 **5. ...

    IA-32架构软件开发人员手册第3卷 系统编程指南 中文版

    - **转换后备缓冲区(TLB)**:用于缓存最近使用的页表项,提高地址转换效率。 #### 七、保护机制 - **启用/禁用段保护和页保护**:描述如何根据需要启用或禁用这些保护机制。 - **用于段级和页级保护的域和标志**:...

    Laravel开发-image-force

    2. **图片处理与优化**:为了提高加载速度和节省带宽,系统可能会使用Laravel的`Intervention Image`库来实现图片的缩放、裁剪、压缩等功能。同时,还可以实现动态生成不同尺寸的图片,适应不同的设备和显示需求。 ...

    Laravel开发-laravel-lightspeed-sync

    本文将深入探讨“Laravel开发-laravel-lightspeed-sync”这一主题,帮助您理解如何将Lightspeed系统中的资源与Laravel应用程序进行无缝同步。 首先,让我们了解一下[Laravel](https://laravel.com/)。Laravel是由...

    Laravel开发-laravel-versioner

    3. **服务提供者**:作为Laravel的服务提供者,`laravel-versioner` 可以无缝集成到Laravel的依赖注入系统中,方便在任何地方使用版本信息。 4. **Artisan命令**:它提供了Artisan命令行工具,允许开发者在终端中...

    Laravel开发-laravel-batched-migrations

    `laravel-batched-migrations`是一个关于如何在Laravel中实现批处理迁移的概念,它有助于确保迁移操作的唯一性和顺序性,尤其是在多开发环境协作时。让我们深入探讨这个话题。 ### 一、Laravel迁移简介 Laravel的...

    Laravel开发-laravel-git-info

    在Laravel框架中进行开发时,我们经常需要与版本控制系统如Git协同工作,以便跟踪代码变更、管理项目历史以及团队协作。"Laravel开发-laravel-git-info"是一个针对这种情况的工具,它允许开发者轻松获取当前Git仓库...

    Laravel开发-l4-schemad-migrations

    如果需要撤销最近的迁移,可以使用`php artisan migrate:rollback`命令,这将调用每个迁移文件中的`down`方法,回滚到最后一次迁移之前的状态。如果要完全撤销所有迁移,可以使用`php artisan migrate:fresh`。 5. ...

    Laravel开发-uptime-monitor-app

    2. 数据迁移与填充:Laravel的数据库迁移系统允许我们在多个环境中保持数据库结构的一致性。同时,使用种子类(Seeder)可以快速填充测试数据。 五、通知机制 1. 事件与监听器:当检测到异常情况,如网站离线或SSL...

    Laravel开发-pending-migration-advisor

    4. **回滚功能**:如果需要撤销最近的迁移,工具可能还包含回滚功能,即`php artisan migrate:rollback`,可以将数据库状态恢复到上一次迁移之前。 5. **定制化提示**:对于特定环境,如生产环境,它可能会提醒...

    Laravel开发-activity

    通过GitHub的公开API,应用可以获取到用户的活动信息,如用户的最近活动、仓库信息、贡献统计等。 此外,为了展示这些活动,开发者可能使用了Blade模板引擎来创建视图。Blade是Laravel内置的一种轻量级的模板引擎,...

    图书馆管理系统--用户手册.docx

    数据库丢失时,应尽快恢复到最近的备份点;硬件故障需要专业人员更换硬件解决。 - **安全性**: 对敏感数据(例如用户密码、数据库连接信息等)进行加密处理。 #### 三、运行环境 - **硬件设备**: - 普通PC机配备1...

    学生成绩管理系统---客户端,基于Android+Django+sqlit3开发.zip

    此外,为了提升用户体验,开发者可能会引入数据缓存策略,如使用Android的LruCache或第三方库如Android Room,缓存最近查询的结果,减少网络请求的频率。同时,利用Android的通知系统,可以及时提醒用户有关成绩更新...

    matlab开发-inpolygons

    总之,`matlab开发-inpolygons`项目是关于在MATLAB中实现高效且准确的点在多边形内判断功能,特别关注处理带有孔洞的复杂多边形,并可能涉及到跨语言接口,使得这个功能可以在更广泛的软件环境中使用。通过解析和...

    Laravel开发-laravel-translations-db

    8. **性能考虑**:虽然数据库查询可能比文件读取稍慢,但`laravel-translations-db`通过缓存策略优化了性能,例如使用Laravel的`Cache`层来存储最近使用的翻译,减少不必要的数据库查询。 9. **易于扩展**:如果你...

    Laravel开发-laravel-api-migrations

    在本文中,我们将深入探讨Laravel开发中的一个重要概念——API迁移。Laravel是一个优雅的PHP框架,它提供了许多工具和特性来简化Web应用的开发,其中包括数据库迁移系统。API迁移是针对API驱动的应用程序,确保...

    基于框架的Web开发-开发文档.doc

    在Web开发中,我们常常使用框架来提高开发效率和系统的可维护性。本文档以"ssjdbc"为例,介绍了一个基于Spring、Spring MVC和JDBC的登录与登录日志系统。系统设计主要包括两个核心表——t_user和t_login_log,以及一...

    新浪微博开放平台开发-android客户端

    最近不是太忙,花了一些时间学习android的应用开发。经过两个星期的学习,学习的同时还写了很多的demo示例,可以从基本控件及基本动画效果等示例demo集合大放送,持续更新下载。 从这个星期开始,准备拿新浪微博...

    matlab开发-ataiyakdtree

    在MATLAB环境中,开发高效的算法和数据结构是提高计算性能的关键。"matlab开发-ataiyakdtree"是一个专为MATLAB设计的kd树(kd-Tree)MEX库,它提供了对空间数据进行高效检索的能力。MEX是MATLAB的C/C++接口,允许...

    ArcGIS-Engine基础开发教程(C#)C#二次开发ArcGis.pdf

    - **6.5.2 最近点查询功能开发**:提供具体的代码实现。 --- #### 7. 学习地图输出 **7.1 目标** - 学习如何使用ArcGIS Engine输出地图图像或PDF文件。 - 理解地图输出的关键技术和注意事项。 **7.2 打印设置** ...

Global site tag (gtag.js) - Google Analytics