Android 系统启动流程
Summary
- 启动电源以及系统启动
- 当设备通电时,引导芯片代码从预定义的地方开始执行。引导程序 BootLoader 到 RAM,然后执行。
- 引导程序 BootLoader
- 引导程序 BootLoader 时安卓操作系统开始运行前的一个小程序,主要是将系统的 OS 拉起来并运行。
- Linux 内核启动
- 当内核启动时,设置缓存,被保护寄存器,计划列表,加载驱动。在内核完成系统设置后,它首先在系统文件中寻找 init.rc,并启动 init 进程
- init 进程启动
- 初始化和启动服务属性,并且启动 Zygote 进程
- Zygote 进程启动
- 创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法,创建服务端 Socket,启动 SystemServer 进程
- SystemServer 进程启动
- 启动 Binder 线程池和 SystemServiceManager,并且启动各种服务。
- Lanucher 启动
- 被 SystemServer 进程启动的 AMS 会的启动 Launcher,Launcher 启动会将已安装应用的快捷图标显示到界面上。
一、启动 BootLoader
- 当用户按下开机键,引导芯片代码开始从预定义的地方(固定在 ROM)开始执行,加载 BootLoader 到内存中执行
- BootLoader 是操作系统内核运行之前的一小段程序,通过这段小程序初始化硬件设备,建立内存空间映射区,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做正确的环境准备,最后目标是将系统 OS 拉起并运行。
- 整个系统的加载任务都是由 BootLoader 完成的
二、加载系统内核
- 当系统内核启动时,设置缓存,被保护寄存器,计划列表,加载驱动。
- 在内核完成系统设置后,它首先在系统文件中寻找 init.rc,并启动 init 进程。
三、启动 init 进程
- init 进程是 Android 系统启动后,由内核启动的第一个用户级进程,其进程号总是 1
- Android 中所有进程都是由 init 进程创建并运行的。
四、启动 Zygote
- 在 init 进程和一些重要的守护进程启动,系统启动 Zygote。
五、SystemServer 启动
- 启动Binder线程池和SystemServiceManager,并且启动各种服务。
六、Launcher启动
- 被SystemServer进程启动的AMS会启动Launcher,Launcher启动后会将已安装应用的快捷图标显示到界面上。