开机时序图
按下电源键开机到系统启动的流程图
开机时序详解
- boot rom 主要作用是加载 boot loader 进入内存并执行,boot rom 一般固化在芯片上,设备启动加电自检后从固定的地址开始执行。
- boot loader 分2步执行,boot rom只加载了第一部分bootloader代码进入内存,这部分代码随即加载第二部分bootloader代码,第二部分是核心,它完成了必要的环境准备后,开始加载内核。
- 启动完Linux内核后,会加载各种驱动和数据结构,当有了驱动以后,开始启动Android系统,同时会加载用户级别的第一个进程init(system\core\init.c),该进程会首先加载一个init.rc配置文件。
- init.rc配置文件会进行很多的配置,创建很多的文件夹及文件,然后初始化一些Android驱动器,之后该配置文件最重要的一个任务就是启动一个Zygote(孵化器)进程,此进程是Android系统的一个母进程,用来启动Android的其他服务进程。
- Zygote会执行一个app_process可执行文件,在这个文件中首先添加了Android运行时环境,在Android运行时中调用了ZygoteInit.java。
- 在ZytofeInit.java代码中首先设置了Java虚拟机的堆内存空间,然后启动一个类加载器加载Android启动依赖的类比如Activity等四大组件,dialog等UI的类,然后分出一个子进程启动SystemServer系统服务。
- SystemServer进程主要用于创建系统服务,我们熟知的AMS、WMS、PMS都是由它来创建的。
常用调试工具
可用bootchart生成的开机时序图获取整体开机过程,分析耗时部分,进一步分析原因。
ubuntu上安装软件{执行sudo apt-get install bootchart pybootchartgui librsvg2-bin}
使用bootchart bootchart.tgz,生成bootchart.png图表
bootchart ./bootchart.tgz
生成后的png图片如下所示: