一、开机流程概述
Android 13 的开机流程主要分为以下几个阶段:
- 第一阶段初始化(First Stage Init)
- 第二阶段初始化(Second Stage Init)
- Zygote 启动
- System Server 启动
- Launcher 启动
二、关键代码分析
1. 初始化入口点
在 Z:\android13\system\core\init\main.cpp 中,main 函数是整个初始化过程的入口点:
int main(int argc, char** argv) {
// Boost prio which will be restored later
setpriority(PRIO_PROCESS, 0, -20);
if (!strcmp(basename(argv[0]), "ueventd")) {
return ueventd_main(argc, argv);
}
if (argc > 1) {
if (!strcmp(argv[1], "subcontext")) {
return SubcontextMain(argc, argv, &function_map);
}
if (!strcmp(argv[1], "selinux_setup")) {
return SetupSelinux(argv);
}
if (!strcmp(argv[1], "second_stage")) {
return SecondStageMain(argc, argv);
}
}
return FirstStageMain(argc, argv);
}
2. 第一阶段初始化
第一阶段初始化在 first_stage_init.cpp 中实现,主要完成以下任务:
- 挂载基本文件系统
- 加载内核模块
- 初始化 SELinux
- 切换到第二阶段初始化
3. 第二阶段初始化
第二阶段初始化在 init.cpp 中实现,主要完成以下任务:
- 解析 init.rc 配置文件
- 启动属性服务
- 启动各种系统服务
- 启动 Zygote 进程
三、开机流程详细步骤
1. 第一阶段初始化(First Stage Init)
- 挂载 /sys、/proc、/dev 等基本文件系统
- 加载必要的内核模块
- 初始化 SELinux 策略
- 切换根文件系统
- 启动第二阶段初始化
2. 第二阶段初始化(Second Stage Init)
- 解析 init.rc 配置文件
- 启动属性服务(Property Service)
- 启动 ueventd 处理设备事件
- 启动 init 进程的各种内置服务
- 启动 Zygote 进程
3. Zygote 启动
- Zygote 初始化 Dalvik 虚拟机
- 预加载系统类和资源
- 启动 System Server 进程
- 监听应用程序启动请求
4. System Server 启动
- 初始化系统上下文
- 启动各种系统服务(ActivityManagerService、PackageManagerService 等)
- 启动 SurfaceFlinger 服务
- 启动 AMS 并启动 Launcher 应用
5. Launcher 启动
- Launcher 应用初始化
- 加载桌面布局和图标
- 显示主屏幕
四、开机流程图
graph TD
A[内核启动] --> B[Init进程启动]
B --> C[第一阶段初始化]
C --> D[挂载文件系统]
C --> E[加载内核模块]
C --> F[初始化SELinux]
C --> G[切换到第二阶段]
G --> H[第二阶段初始化]
H --> I[解析init.rc]
H --> J[启动属性服务]
H --> K[启动系统服务]
H --> L[启动Zygote]
L --> M[启动System Server]
M --> N[启动AMS]
N --> O[启动Launcher]
O --> P[显示主屏幕]
五、关键组件分析
1. Init 进程
- 是 Android 系统的第一个用户空间进程
- PID 为 1
- 负责启动和管理其他系统进程
- 解析 init.rc 配置文件
2. Zygote 进程
- 负责启动和管理所有 Android 应用程序进程
- 采用 fork 方式创建新进程
- 预加载系统类和资源,提高应用启动速度
3. System Server 进程
- 负责管理所有系统服务
- 是 Android 系统的核心进程
- 包含 ActivityManagerService、PackageManagerService 等关键服务
六、总结
Android 13 的开机流程是一个复杂而有序的过程,涉及多个阶段和组件的协同工作。从内核启动到最终显示主屏幕,每个阶段都有明确的职责和任务。通过分析源代码,我们可以深入了解 Android 系统的架构和设计思想。
分析时间: 2026-03-10
分析版本: Android 13