1. 启动流程全景概览:启动阶段划分、关键术语与交付物清单
1.1 适用场景
本章适用于以下场景:
- 初次接触高通8155平台(SA8155P/SA8195P)启动流程的嵌入式开发工程师。
- 需要梳理启动链路各阶段责任边界与交付物的系统集成工程师。
- 进行开机优化、安全启动(Secure Boot)合规性审查的项目成员。
- 编写启动自动化测试用例的QA与验证工程师。
1.2 前置条件
- 已获得高通8155平台相关芯片数据手册(Device Specification)及启动配置指南(Boot Flow Guide)。
- 具备ARMv8-A架构基础认知,了解异常级别(EL0~EL3)。
- 开发环境已搭建完成,至少拥有串口日志抓取工具及JTAG调试能力。
1.3 启动阶段划分与操作步骤
高通8155启动流程按执行顺序可分为以下8个逻辑阶段。每个阶段均有独立的镜像、加载器及运行目标内存区域:
- PBL(Primary Boot Loader):固化在ROM中的一级加载器,上电后由CPU直接从ROM执行,初始化基础时钟、DDR控制器并验证下一级加载器SBL的签名。
- SBL(Secondary Boot Loader):加载并运行于DDR的二级加载器,负责初始化更多外设(UART、eMMC、USB),加载UEFI/ABL到指定内存地址。
- UEFI/ABL(AArch64 Boot Loader):运行在EL2的UEFI固件,解析设备树DTB/ACPI表,加载并启动HLOS(High Level Operating System,即Android/Linux内核)。
- Kernel:Linux内核,解压并初始化设备驱动、内存管理、调度器,挂载根文件系统。
- Init:用户空间第一个进程PID 1,执行init.rc脚本,启动核心服务(servicemanager、surfaceflinger等)。
- Boot Animation:开机动画服务,标志着用户可见界面的启动。
- SystemUI & Launcher:系统UI与桌面启动,完成用户态启动流程。
- CarService:车机专用服务层,初始化空调、音响、车身控制等IVI服务,完成整机启动。
关键认识:PBL到Kernel阶段属于“安全启动链”,每一级加载前都对下一级镜像进行RSA2048/SHA256校验,任何一级校验失败将进入紧急下载模式(EDL)。
1.4 关键术语
| 术语 | 定义 | 关联阶段 |
|---|---|---|
| EL0/EL1/EL2/EL3 | ARM异常级别,EL3最高(安全监控),EL2为虚拟机监控器,EL1为内核,EL0为用户态。 | PBL→Kernel |
| CDT(Device Configuration Data) | 存储于eMMC/NAND中的分区表与硬件配置参数,由PBL/SBL读取。 | PBL、SBL |
| XBL(eXtensible Boot Loader) | 高通对SBL的代称,本质上相同。 | SBL |
| DTB/DTBO | 设备树二进制/覆盖,描述硬件拓扑与资源,用于内核驱动加载。 | UEFI→Kernel |
| EDL(Emergency Download Mode) | 设备进入的恢复模式,可通过QPST/fastboot刷机。 | PBL(异常) |
| HLOS | 高级操作系统,即Android Linux内核及用户空间。 | Kernel→Launcher |
1.5 输入输出物
| 阶段 | 输入物 | 输出物 |
|---|---|---|
| PBL | ROM代码、CDT分区、eMMC boot1/boot2 | SBL镜像加载完成状态、启动链路日志(QUP UART) |
| SBL | sbl1.mbn、sec.dat(安全配置)、rpm.mbn | UEFI/ABL镜像加载完成、DDR初始化完成、时钟树稳定 |
| UEFI/ABL | abl.elf、DTB/DTBO分区、UEFI变量 | kernel Image、ramdisk、fdt地址加载完成 |
| Kernel→Launcher | boot.img、vendor_boot.img、system.img | Android系统启动完成、SurfaceFlinger服务就绪 |
1.6 责任边界
- 芯片级(Qualcomm):PBL提供,不可更改;SBL/UEFI固件由QTI提供参考,OEM可定制CDT与安全配置。
- 平台级(OEM/Tier1):定制ABL参数、设备树、Kernel配置;确保HLOS镜像签名链完整。
- 应用级(IVI团队):负责CarService、SystemUI、Launcher等用户态服务的启动优化与监控。
- 验证团队:制定启动延迟指标(KPI),验收各阶段时间窗口。
1.7 记录材料
每次启动完成后,应由自动化脚本采集以下记录材料并归档:
# 启动日志关键段示例(抓取自串口)
PBL: Boot Mode: 0x0 (Normal)
PBL: Loading SBL from eMMC boot1
SBL: DDR init: 4266MHz, dual channel
SBL: Loading ABL from boot_a partition
UEFI: Kernel load address: 0x80000000
UEFI: DTB at 0x83000000, size 0x30000
Kernel: Booting Linux on physical CPU 0x0
Init: starting service 'surfaceflinger'...
- 启动时间戳:各阶段标记点(Ping-Pong计时或Trace32时间轴截图)。
- 安全校验结果:PBL/SBL签名校验通过/失败日志。
- 异常快照:进入EDL时的故障转储文件(dump.elf)。
1.8 异常处理
常见异常场景及应对策略:
- PBL卡死、无串口输出:检查供电序列(PMIC复位时序)、晶振起振、JTAG读取ROM状态寄存器。
- SBL校验失败(SECURE_BOOT_EN=1):确认SBL镜像签名与OEM root cert匹配,检查sec.dat有效期。
- UEFI无法加载Kernel:检查boot.img头信息(页大小、内核偏移量)、DTB/DTBO分区是否损坏。
- Kernel panic后重启:通过ramdump抓取vmcore,分析最后调用栈。
- Boot Animation后黑屏:检查SurfaceFlinger初始化日志、HWC HAL兼容性。
1.9 验收标准
| 验收项 | 达标要求 |
|---|---|
| 电源接通至串口输出PBL日志 | ≤ 500ms |
| PBL → SBL跳转完成 | ≤ 1.5s |
| SBL → UEFI跳转完成 | ≤ 1.0s |
| Kernel解压完成至init启动 | ≤ 2.5s |
| Launcher完全显示(首帧) | ≤ 12s(冷启动) |
| 整个流程无安全校验失败记录 | 100% 通过率 |