【Android进阶】Android设备开机流程

【Android进阶】Android设备开机流程

本文介绍了Android设备开机流程

Android设备的启动过程是一个复杂的多阶段过程,涉及硬件初始化、引导加载、操作系统内核加载、系统服务启动等多个环节。那么从上电开始,到显示出系统桌面,中间经历了哪些关键步骤呢?

硬件上电阶段

设备接通电源后, 电源管理芯片(Power Management IC) 首先开始工作。PMIC负责为各个硬件组件提供稳定的电压和电流。按照预设顺序依次激活CPU、内存等关键组件。

CPU初始启动

CPU从预设的复位向量(Reset Vector)地址开始执行。通常是芯片内部固化的一段非常小的启动代码(BootROM)。这段代码是芯片制造商预先写入的,不可修改

执行芯片内部BootROM代码

BootROM代码执行基本的硬件初始化,验证并加载下一阶段的引导程序(通常是从特定存储区域),实现安全验证(如验证Bootloader签名)

安全启动(Secure Boot)验证

现代Android设备都支持安全启动机制,BootROM会验证Bootloader的数字签名,只有签名验证通过的Bootloader才能被加载执行

Bootloader阶段

第一阶段Bootloader(Primary Bootloader)

通常存储在设备的只读存储区域(如eMMC的boot分区)

负责初始化基本硬件(如内存控制器、时钟等)

加载并验证第二阶段Bootloader

第二阶段Bootloader(Secondary Bootloader)

更复杂的引导程序(如U-Boot)

初始化更多硬件设备

提供基本的命令行交互界面(在开发模式下)

加载Linux内核和初始RAM磁盘(initrd)

Bootloader模式。设备启动时按特定组合键(如Volume+Power)可进入Bootloader模式。支持刷写新系统(fastboot模式),恢复出厂设置(recovery模式),选择启动分区(多系统切换)

Linux内核启动阶段

内核加载与初始化 Bootloader将压缩的Linux内核加载到内存,解压并跳转到内核入口点(start_kernel函数)

内核开始初始化:

  • 设置内存管理
  • 初始化中断控制器
  • 设置进程调度器
  • 初始化设备驱动

设备树(Device Tree)解析

ARM架构设备使用设备树(Device Tree)描述硬件配置,内核解析设备树文件(.dtb),了解设备硬件配置,根据设备树初始化相应硬件驱动

init进程启动

内核启动的第一个用户空间进程是init(pid=1)

init进程负责:

  • 解析init.rc脚本
  • 创建系统关键目录
  • 启动ueventd、logd等基础服务
  • 挂载文件系统

Android系统启动阶段

解析并执行init.rc和设备相关的 init.<device>.rc 脚本。

启动关键守护进程:

  • ueventd:处理设备事件
  • logd:日志服务
  • servald:SELinux相关服务
  • healthd:电池健康监控
  • debuggerd:调试服务

Zygote进程启动

init进程最终会启动Zygote进程,Zygote是Android应用的基础进程,特点:

  • 预加载常用Java类和资源
  • 包含一个Dalvik/ART虚拟机实例
  • 监听socket等待孵化新应用进程

System Server启动

Zygote会孵化出System Server进程。System Server是Android框架的核心,负责启动几乎所有系统服务:

  • ActivityManagerService(AMS)
  • PackageManagerService(PMS)
  • WindowManagerService(WMS)
  • PowerManagerService
  • 等等…

服务启动顺序

System Server按特定顺序启动服务:

  • 引导服务(Bootstrap Services):
    • ActivityManagerService
    • PowerManagerService
    • PackageManagerService
  • 核心服务(Core Services):
    • BatteryService
    • UsageStatsService
  • 其他服务(Other Services):
    • StatusBarManagerService
    • InputMethodManagerService

桌面环境启动阶段

System Server启动完成后,AMS会启动Launcher应用。Launcher是设备的桌面环境,负责:

  • 显示应用图标
  • 处理应用启动请求
  • 管理小部件和壁纸

Launcher加载并显示:

  • 主屏幕布局
  • 应用抽屉
  • 小部件
  • 壁纸

同时,还需要从PackageManager获取已安装应用列表,为每个应用创建快捷方式图标

最终用户界面

所有系统服务和桌面组件初始化完成后,设备显示完整的桌面环境,用户可以开始与设备交互