-
Boot Loader 加载阶段
Boot Loader 是在物理电源按下之后第一个加载的。绝大部分的设备,在此阶段都会运行一些制造商自定义的初始化代码,如启动Clock、RAM、Media等,并提供加载Recovery Image和进行Download Mode的支持。Boot Loader内部也是分为多个阶段的,在此我们不再详细讨论。
-
加载Kernel 与initrd阶段
Boot分区加载Linux kernel 与 initrd到RAM,最后跳转到Kernel继续完成启动。
-
初始化设备服务阶段
Android kernel则会启动所有Android 系统设备所必须的服务,如初始化 Memory、初始化IO. 内存保护、中断处理程序、CPU调度、设备驱动,最后还会挂载文件系统,启动第一个用户进程 init。
-
加载系统服务阶段
init是Linux系统中用户空间的第一个进程,其进程PID是1,父进程为LinuxKernel核的0号进程。init具有特殊的初始化使命,它会加载一个初始化启动脚本文件init.rc,启动Android系统的一些核心服务,如针对通话的rild、针对VPN连接的mtpd、提供 adb相关功能adbd、支持存储外设的热插拔功能的 vold、负责进程孵化服务的Zygote、Service Manager等。
-
虚拟机初始化阶段
其中启动的Zygote进程会创建Dalvik VM,会启动第一个Java组件系统服务,最后是AndroidFramework服务,如Telephone Manager、Activity Manager、Window Manager、Package Manager。
-
启动完成阶段
当系统完全启动之后,载入Home((桌面应用程序),然后做一些应用层的初始化工作,如播放一个全局的广播ACTION_BOOT_COMPLETED。