从系统层看:
-
linux 系统层
-
Android系统服务层
-
Zygote
从开机启动到Home Launcher:
-
启动bootloader (小程序;初始化硬件)
-
加载系统内核 (先进入实模式代码在进入保护模式代码)
-
启动init进程(用户级进程 ,进程号为1)
-
启动Zygote进程(初始化Dalvik VM等)
-
启动Runtime进程
-
启动本地服务(system service)
-
启动 HomeLauncher
详细解析
Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。
一、启动BootLoader
Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。
而Linux系统启动时:
-
首先要加载BIOS的硬件信息,并获取第一个启动设备的代号
-
读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的启动信息。
-
加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有的硬件设备。
…………
在嵌入式系统中,通常不会有像BIOS那样的固件程序,因此整个系统的加载任务都是通过BootLoader完成的。
二、加载系统内核
Linux内核映像通常包括两部分代码,分别为实模式代码和保护模式代码。当BootLoader装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行完成后转入保护模式代码。
实模式和保护模式的概念再次不做过多解释,读者可以自行查阅资料。
三、启动Init进程
当系统内核加载完成之后,会首先启动Init守护进程,它