Android系统的初始化流程分为几个大的阶段。
首先是Bootloader阶段,引导Linux Kernel的启动,此部分的分析略过。
内核启动挂载根文件系统成功后,会启动第一个进程(pid为1)init。
init进程会通过解析启动脚本init.rc和init.(hardwarename).rc完成如下的任务:
(1) fork一系列守护进程(daemon),例如调试进程adbd,USB守护进程usbd,通信进程rild等。
(2) fork一个zygote进程,在这个进程里,会生成第一个dvm虚拟机的实例,启动socket监听,每当有请求创建新的service时,zygote会负责为其创建新的进程。
(3) 初始化runtime进程,启动service manager,用于android系统里所有service的管理,接着发送请求至zygote,创建虚拟机用于System server(原生系统服务),如surface flinger,audio flinger等,并将其注册到service manager;然后启动android service,并将这些服务注册到service manager
(4) 加载完所有的服务后,会通过回调通知各个服务System ready,在activitymanagerservice的回调中,会启动第一个HOME应用。