安卓系统全流程启动

安卓系统全流程启动

组件层级关系全链路启动流程 两个维度来拆解,清晰展示 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。

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

相关推荐
2401_8920709819 小时前
【Linux C++ 日志系统实战】Logger 日志器完整实现:级别控制、宏封装、动态输出、自动崩溃退出
linux·c++·日志系统
蓝天居士19 小时前
cpio命令详解(1)
linux·cpio
原来是猿19 小时前
Linux进程信号详解(一):信号快速认识
linux·c++·算法
minji...19 小时前
Linux 多线程(二)进程虚拟地址空间&&页表&&物理地址
linux·运维·服务器
IMPYLH20 小时前
Linux 的 link 命令
linux·运维·服务器·bash
放学以后Nicetry20 小时前
Android SELinux 指南:从基本概念到实战修复
android
CCIE-Yasuo20 小时前
《永恒战士2-无双战神》无限金币版(提供apk下载)安卓Android逆向记录学习-Deepseek-AI辅助
android·java·学习·游戏
朗道十戒20 小时前
Win11系统下WSL2将Ubuntu24.04安装在其他盘符路径
linux·ubuntu
蛐蛐蛐20 小时前
在Ubuntu上重新安装OpenClaw报错的一种解决方法
linux·运维·ubuntu·openclaw
太多.梦想.完成20 小时前
Linux系统无头浏览器pupteer截图出来中文乱码
linux·运维·服务器