Android 系统启动

359 阅读2分钟

1. init 进程启动过程

image.png

1.1 引入 init 进程

首先了解 Android 系统启动流程的前几步,以引入 init 进程。

1. 启动电源以及系统启动

2. 引导程序 BootLoader

3. Linux 内核启动

4. init 进程启动

image.png

  • init 进程是其子进程的守护进程,在子进程终止时守护进程会收到通知对终止事件进行处理。一般是清理子进程占用的资源防止僵尸进程的产生,占用系统进程表。Zygote 进程终止之后,init 进程会重启 Zygote 进程。

  • Android 系统中用户空间的第一个进程,进程号为 1。

  • 创建 Zygote 和属性服务。

  • 创建和挂载 tmps、devpts、proc、sysfs、selinuxfs 5 种文件系统,这些都是系统运行时目录。

  • 启动属性服务,属性服务与注册表类似,提供了对于系统属性修改与查询的能力,属性服务启动后会分配内存储存属性,可在初始化与其他阶段直接读取。

1.2 init 进程的入口函数

image.png

image.png

image.png

image.png

僵尸进程与危害

image.png

1.3 解析 init.rc

1.4 解析 Service 类型语句

1.5 init 启动 Zygote

image.png

image.png

image.png

image.png

1.6 属性服务

image.png

image.png

image.png

image.png

image.png

1.7 init 进程启动总结

image.png

2. Zygote 进程启动过程

2.1 Zygote 概述

image.png

2.2 Zygote 启动脚本

Zygote 有 zygote32、zygote64、zygote32_64(主32辅64两个进程)、zygote64_32(主64辅32)四种模式。

2.3 Zygote 进程启动过程介绍

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2.4 Zygote 进程启动总结

image.png

3. SystemServer 处理过程

SystemServer 进程主要用于创建系统服务。

3.1 Zygote 处理 SystemServer 进程

image.png

image.png

image.png

image.png

image.png

image.png

3.2 解析 SystemServer 进程

image.png

image.png

image.png

image.png

image.png

3.3 SystemServer 进程总结

image.png

启动 Binder 线程池,用于与其他进程通信(注意:Binder 线程池在 SystemServer 进程中,而不是 Zygote 进程,Zygote 进程必须保持单线程。)

4. Launcher 启动过程

4.1 Launcher 概述

image.png

4.2 Launcher 启动过程介绍

image.png

image.png

image.png

image.png

image.png

image.png

4.3 Launcher 中应用图标显示过程

image.png

image.png

image.png

image.png

image.png

image.png

5. Android 系统启动流程

image.png

image.png