3. PBL初始化步骤:ROM Code执行、启动设备选择、签名校验
3.1 适用场景
本流程适用于高通8155(SA8155P)平台冷启动或硬件复位后,芯片内Boot ROM(PBL)加载并验证一级启动镜像的完整阶段。典型场景包括:
- 车辆上电后主处理器从复位向量开始执行
- 刷写失败后进入紧急下载模式(Emergency Download Mode)
- 安全启动(Secure Boot)策略下的强制签名验签流程
3.2 前置条件
| 序号 | 条件 | 说明 |
| 1 | 硬件复位或POR(Power-On Reset)已完成 | CPU从reset vector开始执行,PC指向Boot ROM首地址 |
| 2 | Boot ROM代码完整且未被篡改 | Boot ROM为掩膜ROM,不可更改,出厂即固化 |
| 3 | 启动设备硬件正常 | 如eMMC、UFS、SD卡或USB外设已上电并处于可访问状态 |
| 4 | 至少一个可用的签名公钥哈希已烧录到eFuse中 | 若启用安全启动,eFuse中需预置OEM公钥指纹(PBL Hash) |
3.3 操作步骤
- ROM Code入口执行
Core0从复位向量取指,执行Boot ROM首条指令。代码首先初始化CPU最基本的异常向量表、栈指针、MMU及核心时钟。
- 硬件自检与启动原因识别
读取PMIC寄存器判断复位原因:冷启动、看门狗复位、深度睡眠唤醒等。根据不同原因选择不同启动路径。
- 启动设备枚举与探测
按固定优先级顺序(通常为eMMC→UFS→USB→SD卡)尝试初始化各外设,读取设备标识并尝试获取第一块数据(boot header)。
- 加载一级启动镜像头(SBL Header)
从成功枚举的设备中读取固定偏移(如LBA 0)的512字节启动头,解析magic、镜像大小、签名信息、加载地址等字段。
- 签名校验(如果启用Secure Boot)
使用Boot ROM内置RSA公钥(或eFuse中的公钥哈希)验证启动头的数字签名。验证通过则继续;否则锁死或进入下载模式。
- 跳转到SBL(Secondary Boot Loader)
将验证通过的SBL镜像拷贝到目标内存地址,清除缓存后跳转执行。PBL使命完成,控制权移交SBL。
3.4 输入输出物
| 类别 | 名称 | 说明 |
| 输入 | Boot ROM固件(掩膜ROM) | 芯片内部固化代码,不可修改 |
| 输入 | eFuse中OEM公钥哈希 | 安全启动场景下预烧录的指纹 |
| 输入 | 启动设备上的一级镜像(SBL) | 位于启动设备预定扇区,包含boot header和签名 |
| 输出 | SBL加载成功标志 | 寄存器或内存地址状态指示SBL已就绪 |
| 输出 | 启动设备初始化状态 | 枚举结果,用于后续诊断 |
| 输出 | 签名校验结果(通过/失败) | 写入特定寄存器或错误码 |
3.5 责任边界
- SoC厂商(高通):保证Boot ROM代码正确性、安全性及启动设备驱动完备性。
- Tier1/OEM:负责eFuse配置(公钥哈希烧录)、启动设备布局(SBL放置位置与签名),并确保签名工具链符合高通规范。
- PBL代码:作为安全起点,不依赖任何外部存储的完整性和可靠性——它本身不可篡改。
- 系统集成方:需在硬件设计阶段确定启动设备优先级,并验证PBL枚举时序满足上电窗口要求。
3.6 记录材料
| 记录项 | 来源 | 格式示例 |
| 启动原因寄存器值 | PMIC/Reset控制寄存器 | 0x01: Cold boot
0x02: Watchdog reset
0x03: Deep sleep wake
|
| 启动设备枚举结果 | Boot ROM日志(通过UART输出) | [PBL] Attempting boot from eMMC... OK
[PBL] Loading SBL header from LBA 0
|
| 签名校验结果 | 安全认证状态寄存器 | 0x00000000: PASS
0x00000004: FAIL (hash mismatch)
|
| SBL加载地址与大小 | Boot ROM内部数据结构 | SBL image start: 0x80200000
SBL image size: 0x40000 bytes
|
3.7 异常处理
⚠ 典型异常场景与对策
- 启动设备枚举失败:PBL会遍历所有支持设备,若全部失败则进入下载模式(保持USB/串口等待主机刷写)。此时芯片不挂死,可通过QPST或Firehose协议恢复。
- 签名校验失败:若Secure Boot强制开启,PBL直接锁定芯片(写入永久错误寄存器)并进入安全错误状态,需断电重新烧录eFuse或更换芯片。
- 镜像头magic错误:PBL尝试下一个启动设备或回退到USB下载模式。日志可通过GPIO或UART输出错误码。
- SBL镜像尺寸超限:PBL解析头中镜像大小后,对比内部缓冲区限制,超限则放弃加载并报错。
3.8 验收标准
| 标准项 | 验证方法 | 指标 |
| PBL正常启动并加载SBL | 外部示波器抓取启动引脚波形,或查看UARTJump to SBL at 0x80200000
| 启动时间≤200ms(冷启动) |
| 安全启动签名校验通过 | 在安全场景下,用非法签名的SBL上电,芯片应进入可识别的锁死状态 | 非法签名100%阻挡,不泄露任何用户代码 |
| 启动设备优先级正确 | 移除高优设备,PBL自动切换至次优设备并成功启动 | 枚举顺序符合产品设计文档 |
| 异常场景可恢复 | 全部枚举失败后,USB下载功能必须可用 | 主机可识别到QHSUSB_BULK设备 |
3.9 PBL初始化流程总图