安卓系统全流程启动

安卓系统全流程启动

组件层级关系全链路启动流程 两个维度来拆解,清晰展示 ATF、OP-TEE、LK (Little Kernel)、Linux Kernel 和安卓应用之间的协作。


一、组件层级关系与核心定位

整个系统分为 安全世界 (Secure World)非安全世界 (Normal World/REE),各组件层级如下:

世界 层级 组件 核心作用 运行特权级
安全世界 EL3 固件 ATF (TF-A) BL31 安全监控器、世界切换枢纽、PSCI 电源管理、SMC 调用处理 EL3 (最高)
TEE 操作系统 OP-TEE 可信执行环境,运行安全应用 (TA),提供密钥管理、加密运算等安全服务 Secure EL1
非安全世界 Bootloader LK (Little Kernel) 非安全世界引导程序,初始化外设、加载 Linux Kernel 与设备树 Non-secure EL2/EL1
操作系统内核 Linux Kernel 安卓系统的底层内核,负责进程调度、内存管理、硬件驱动 Non-secure EL1
安卓系统框架 Android Runtime (ART) / Zygote 安卓应用运行环境,孵化应用进程 Non-secure EL0
用户应用 安卓应用程序 最终用户交互的应用,可通过 TEE Client API 与 OP-TEE 通信 Non-secure EL0

二、完整全链路启动流程

系统上电安卓应用启动 的完整流程如下:


第一阶段:ATF 安全启动链 (BL1 → BL2 → BL31)

  • 触发:系统上电/复位,CPU 进入 EL3。
  • 步骤
    1. BL1 (ROM):固化在芯片 ROM 中,初始化片内 SRAM,从 Flash 加载并验签 BL2。
    2. BL2 (Secure EL1) :初始化 DRAM,从 Flash 加载 BL31 (ATF)BL32 (OP-TEE)BL33 (LK),并对三者进行链式验签。
    3. BL31 (EL3):初始化 EL3 环境、PSCI 服务、OP-TEE 的 SPD 分发器。

第二阶段:OP-TEE (BL32) 初始化

  • 触发:BL31 跳转到 BL32。
  • 步骤
    1. BL31 通过 opteed 分发器,配置 CPU 上下文,执行 ERETEL3 切换到 Secure EL1,跳转到 OP-TEE 入口。
    2. OP-TEE 执行自身初始化:初始化 TEE 内核、安全存储、加密引擎、预加载安全应用 (TA)。
    3. OP-TEE 初始化完成后,触发 SMC 调用 ,主动陷回 EL3,将 CPU 控制权交还给 BL31。

第三阶段:LK (Little Kernel - BL33) 启动

  • 触发:BL31 从安全世界切换到非安全世界。
  • 步骤
    1. BL31 配置非安全世界上下文(设置 SCR_EL3.NS=1,目标异常等级为 Non-secure EL2/EL1)。
    2. BL31 执行 ERET,从 EL3 退出到 Non-secure EL2/EL1 ,跳转到 LK 的入口地址。
    3. LK 初始化
      • 初始化非安全世界外设:UART、存储(eMMC)、网络、显示等。
      • 从 Flash 读取 Linux Kernel 镜像zImage/Image)和 设备树 (DTB) 到 DRAM 的预定义地址。
      • 设置内核启动参数(Command Line)。
    4. LK 跳转到 Linux Kernel 的入口地址。

第四阶段:Linux Kernel 启动

  • 触发:LK 跳转到 Kernel。
  • 步骤
    1. Kernel 自解压与初始化
      • 若为 zImage,先进行自解压。
      • 初始化 MMU、页表、内存管理、进程调度器。
      • 解析设备树 (DTB),加载并初始化硬件驱动(如存储、网络、显示驱动)。
    2. 挂载根文件系统 (RootFS)
      • 挂载 ramdisksystem 分区作为根文件系统。
    3. 启动 init 进程
      • 执行用户空间的第一个进程 /init(PID=1),负责初始化安卓用户空间。

第五阶段:安卓系统框架启动

  • 触发:Linux init 进程启动。
  • 步骤
    1. init 进程解析 rc 脚本
      • 执行 init.rcinit.<platform>.rc 脚本,启动核心守护进程(如 servicemanagervoldnetd)。
    2. 启动 Zygote 进程
      • init 启动 app_process,即 Zygote(安卓应用的孵化器)。
      • Zygote 初始化 Android Runtime (ART),预加载系统类库和资源。
    3. 启动 System Server
      • Zygote 孵化第一个应用进程 System Server,启动安卓核心服务(如 ActivityManagerService、PackageManagerService、WindowManagerService)。
    4. 启动桌面应用 (Launcher)
      • System Server 准备就绪后,发送 Intent 启动桌面应用(Launcher),显示主屏幕。

第六阶段:安卓应用程序启动与运行

  • 触发:用户点击桌面应用图标。
  • 步骤
    1. ActivityManagerService 处理 Intent
      • 桌面应用发送 Intent,System Server 中的 ActivityManagerService 接收请求。
    2. Zygote 孵化应用进程
      • ActivityManagerService 请求 Zygote 孵化一个新的应用进程。
      • Zygote fork 出子进程,初始化该应用的 ART 实例。
    3. 应用组件初始化
      • 新进程加载应用 APK,初始化 Application 类,启动主 Activity。
      • Activity 执行 onCreate()onStart()onResume(),应用界面显示在屏幕上。

运行时扩展:安卓应用与 OP-TEE 通信

当安卓应用需要安全服务(如支付、加密)时,通过以下流程与 OP-TEE 交互:

  1. 安卓应用调用 TEE Client API (如 TEEC_OpenSession())。
  2. Client API 通过 Linux 内核的 OP-TEE 驱动 触发 SMC 调用
  3. CPU 从 Non-secure EL0 陷入 EL3,BL31 的 opteed 分发器将请求路由到 OP-TEE。
  4. OP-TEE 执行对应的安全应用 (TA),完成安全运算后,结果通过 SMC 原路返回给安卓应用。

总结:关键流程节点

  1. 安全世界启动:ATF BL1 → BL2 → BL31 → OP-TEE → BL31。
  2. 非安全世界启动:BL31 → LK → Linux Kernel → init → Zygote → System Server → Launcher。
  3. 应用启动:用户点击 → Zygote 孵化 → 应用显示。
  4. 安全通信:安卓应用 → Linux 驱动 → SMC → BL31 → OP-TEE TA。

这套流程确保了从硬件信任根到用户应用的全链路安全,同时实现了安全世界与非安全世界的隔离与协作。

相关推荐
小李独爱秋1 小时前
模拟面试:用自己的话解释一下lvs的工作原理
linux·运维·面试·职场和发展·操作系统·lvs
一路往蓝-Anbo2 小时前
第 7 章:内存地图 (Memory Map) 深度设计——DDR 与 SRAM
linux·stm32·单片机·嵌入式硬件·网络协议
BHXDML2 小时前
VMware Workstation Pro 安装详细教程(超详细图文讲解)
linux·虚拟机
一路往蓝-Anbo2 小时前
第 8 章:M33 领航——引导 A35 加载 U-Boot 与 Linux 内核
linux·运维·服务器·stm32·单片机·嵌入式硬件·网络协议
summerkissyou19873 小时前
Android-Audio-MediaPlayer-播放-流程
android·audio
mjhcsp3 小时前
C++ 后缀平衡树解析
android·java·c++
一路往蓝-Anbo3 小时前
第 6 章:GPIO 与外部中断——M33 掌控下的 LED 与按键响应
linux·stm32·单片机·嵌入式硬件
没有bug.的程序员4 小时前
Gradle 构建优化深度探秘:从 Java 核心到底层 Android 物理性能压榨实战指南
android·java·开发语言·分布式·缓存·gradle
闲人编程4 小时前
任务监控与错误重试
linux·服务器·网络·celery·任务队列·任务监控·错误重试