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

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来实现自动安装

猜你喜欢

转载自dengzhangtao.iteye.com/blog/1810125
今日推荐