Android BOOT Time 优化
Rocky@20110317
Android的启动和大多数的智能手机设备都一个通病,都是启动比较慢。这里的速度优化并不是从源代码的角度来优化,因为我相信Google已经做了非常多的工作。但是每个人的机器是不一样的。特别是我们做MID,产品差别很大,有必要针对自己的产品做一些裁剪工作,用这个裁剪来优化我们的开机速度。
Android开机流程:
Bootloader
kernel
Init
Zygote
Service manager
具体分析:
Bootloader一般比较难操作,这里也可以尽量少的做一些不必要的延迟操作。
Kernel:
这个地方分两块:
1:减少你系统不需要的Driver。这样Kernel的大小自然就小了。加载速度自然就快了。
2:减少不必要的打印信息。在正式版本中,我们需要把一些调试的信息全部删掉。具体要删除那些,要看情况。这里推荐一篇文章。
http://www.elinux.org/Boot_Time
其中说到的Kernel speedups ,方法有:
Disable Console - Avoid overhead of console output during system startup.
Disable bug and printk - Avoid the overhead of bug and printk. Disadvantage is that you loose a lot of info.
....
个人发现这两点在我们的机器上表现是最为明显的。
随意,在kernel command string 中添加quiet,可以节约kernel启动的10s的启动时间。
具体位置:
/kernel/ make menuconfig
【Boot Options】、【Default kernel command string 】
末尾添加一句
quiet
Init:实际上就是做一些初始化的工作。包括load service ,zygote,下面是具体的介绍
Zygote:
它的源代码在android_tcgit/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
会做一些preloadClasses ,preloadResources的动作。我们可以通过在开机的时候
adb shell logcat -s Zygote I
查看这个部分的打印信息。可以看出在preloadClasses的时候耗时也是蛮长的。但是不建议修改。否则就是牙膏效益,后面的加载时间更长。有很多的文章讲在这里节约时间。
我奉劝各位还是不要去动它,之所以说到这里,是因为很多的都会说。
Service Manager.
这个装载分成两个部分,一个是frameworks/base/services/java/com/android/server代码装载,一个是在init.rc类似的文件中装载。
记住,删除我们不需要的东西。例如,我们这里根本没有BlueTooth。所以删除和蓝牙相关的项目。
总之,android的启动结构已经优化了很好的了。我们关键的一点就是去掉一些没有必要的东西,例如打印信息,不需要的驱动和服务启动项。
参考资料:
http://www.elinux.org/Boot_Time
http://elinux.org/Improving_Android_Boot_Time
http://blog.csdn.net/jackyu613/archive/2010/11/30/6044297.aspx
http://elinux.org/Improving_Android_Boot_Time_Outline