第3章 Android启动过程的底层实现

Android支持多种启动模式,主要有正常模式(normal mode)、安全模式(safe mode)、恢复模式(recovery mode)、工厂模式(factory mode)、快速启动模式(fastboot mode)等。除正常模式外,都是刷机或者测试模式,本书只讲解正常模式下Android的启动过程。如果读者对其他启动模式感兴趣,可以自行查阅相关资料。

3.1 Android正常模式启动流程

Android的正常模式启动流程大体如下:

步骤1 系统加电,执行bootloader。bootloader负责初始化软件运行所需的最小硬件环境,最后加载内核到内存中。

步骤2 内核加载进内存后,将首先进入内核引导阶段,在引导阶段最后,调用start_kernel进入内核启动阶段。start_kernel最终启动用户空间的init程序。

步骤3 init程序负责解析init.rc配置文件,开启系统守护进程。两个最重要的守护进程是zygote和ServiceManager。前者是Android启动的第一个Dalvik虚拟机,它将负责启动Java世界的进程;后者是Binder通信的基础。

步骤4 zygote虚拟机启动子进程system_server,在system_server中开启了Android核心系统服务并将核心系统服务添加到ServiceManager,然后系统进入systemReady状态。

步骤5 在systemReady状态下,ActivityManagerService与zygote中的Socket通信,通过zygote启动Home应用,进入系统桌面。

步骤1中的bootloader依赖于硬件体系结构,需要读者熟悉特定硬件体系结构及其对应的汇编语言。每个厂商都有自己独特的bootloader程序,所以本书不介绍这部分内容。步骤2和步骤3主要与Linux相关,但是对理解框架层至关重要,将在本章讲解。步骤4和步骤5与Android关系更紧密,将在第4章讲解。