目录
一、框架图

二、简略流程
上电->启动BootROM->加载bootloader到RAM->。。。
三、基本流程
一、Bootloader阶段(从硬件到加载内核)
技术栈:芯片固件、引导加载程序、设备树
- BootROM (芯片内部ROM):
- 原理:这是芯片上电后执行的第一段不可更改的代码,固化在CPU内部。它根据预定义的引脚电平(如音量键)确定启动模式(正常启动/Recovery/Download)。
- 技术:读取eMMC/UFS的预定义地址(如
0x0),加载主Bootloader(如U-Boot)到内部SRAM并执行。
- 主Bootloader (如U-Boot, Little Kernel):
- 流程:
a. 初始化:初始化更复杂的硬件,如DDR内存、存储控制器、显示控制器。
b. 加载:从存储的特定分区(如boot)加载boot.img到内存。boot.img包含内核与初始内存盘。
c. 验证:验证内核签名(如果设备已解锁)。在A/B设备上,还会决定从哪个Slot(A或B)启动。
d. 跳转:将CPU控制权交给内核,并传递设备树信息。 - ROM开发关注点:
boot.img的打包格式、kernel cmdline参数、设备树的编译与包含。
- 流程:
二、内核与早期用户空间阶段(建立运行环境)
技术栈:Linux内核、Init进程、设备树
- 内核启动:
- 流程:内核解压并初始化自身,解析Bootloader传递的设备树来识别硬件,初始化CPU调度、内存管理、驱动框架。
- 关键动作:加载驱动模块,并挂载由
boot.img中的ramdisk构成的初始根文件系统(rootfs)。 - 技术:
ramdisk是一个临时的、内存中的根文件系统,包含启动所必需的最小文件,如init程序、驱动模块和fstab文件。
- 第一阶段 Init (
first_stage_init):- 流程:内核启动的第一个用户空间进程就是
init。它首先执行first_stage_init。 - 核心任务:
a. 挂载早期分区:解析ramdisk中的/fstab.<device>,挂载system、vendor等分区到/system_root、/vendor。
b. 准备环境:为切换到下一阶段做准备。 - ROM开发关注点:
device/目录下的fstab文件是设备挂载的蓝图,定义了分区、文件系统、挂载点。
- 流程:内核启动的第一个用户空间进程就是
三、系统服务启动阶段(软件世界的构建)
技术栈:Binder、Zygote、SystemServer、SELinux
-
第二阶段 Init (
second_stage_main):- 流程:切换根目录到
/system,并执行/system/bin/init。 - 核心任务:
a. 初始化关键目录:创建并设置/dev、/proc、/sys等目录权限。
b. 初始化属性服务:启动property service,这是系统全局配置中心。
c. 加载 SELinux 策略:进入安全增强模式。
d. 解析并执行 init.rc 脚本:这是启动所有系统服务的总剧本。
- 流程:切换根目录到
-
Zygote 进程孵化:
- 原理:
init.rc中会启动zygote服务(对应/system/bin/app_process)。Zygote 是 “孵化器” ,它预加载了Android框架的类库和资源。当需要启动新App时,Zygote通过fork自身来快速创建新进程,极大节省内存和启动时间。 - 流程:Zygote启动后,会
fork出system_server进程。
- 原理:
-
SystemServer 启动(核心):
-
流程:
system_server是Android系统服务的“大管家”,它在run方法中逐步启动所有核心服务。 -
关键服务启动顺序与原理:
服务 缩写 启动时机/依赖 核心作用 ActivityManagerService AMS 较早启动 应用生命周期、四大组件调度的中枢 PackageManagerService PMS 依赖Installer 应用安装、解析、权限管理 WindowManagerService WMS 依赖DisplayManager 窗口管理、Surface分配、输入事件派发 DisplayManagerService DMS 较早启动 显示设备管理 InputManagerService IMS 依赖WMS 输入设备管理、事件流处理 -
技术:这些服务大多通过Binder IPC机制向应用提供能力。Binder驱动在内核启动时已加载,此时SystemServer会将自己注册为Binder上下文管理者。
-
四、应用层启动(Launcher出现)
技术栈:ActivityManager、应用进程模型
- 启动HOME Activity:
- 流程:当核心服务就绪后,AMS会查找
Intent.CATEGORY_HOME的Activity。它通过PMS查询所有已安装应用,找到默认Launcher(如com.google.android.apps.nexuslauncher)。 - 进程创建:AMS请求Zygote
fork出Launcher应用进程。 - Activity启动:在新进程中,AMS指导Launcher完成Activity的创建、
onCreate生命周期,并最终调用WMS为其创建窗口和Surface。
- 流程:当核心服务就绪后,AMS会查找
- Launcher渲染界面:
- 流程:Launcher加载布局,从PMS查询所有已安装应用,显示图标。WMS将Launcher的Surface与SurfaceFlinger合成,最终输出到屏幕。
0 条评论