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首地址
2Boot ROM代码完整且未被篡改Boot ROM为掩膜ROM,不可更改,出厂即固化
3启动设备硬件正常如eMMC、UFS、SD卡或USB外设已上电并处于可访问状态
4至少一个可用的签名公钥哈希已烧录到eFuse中若启用安全启动,eFuse中需预置OEM公钥指纹(PBL Hash)

3.3 操作步骤

  1. ROM Code入口执行
    Core0从复位向量取指,执行Boot ROM首条指令。代码首先初始化CPU最基本的异常向量表、栈指针、MMU及核心时钟。
  2. 硬件自检与启动原因识别
    读取PMIC寄存器判断复位原因:冷启动、看门狗复位、深度睡眠唤醒等。根据不同原因选择不同启动路径。
  3. 启动设备枚举与探测
    按固定优先级顺序(通常为eMMC→UFS→USB→SD卡)尝试初始化各外设,读取设备标识并尝试获取第一块数据(boot header)。
  4. 加载一级启动镜像头(SBL Header)
    从成功枚举的设备中读取固定偏移(如LBA 0)的512字节启动头,解析magic、镜像大小、签名信息、加载地址等字段。
  5. 签名校验(如果启用Secure Boot)
    使用Boot ROM内置RSA公钥(或eFuse中的公钥哈希)验证启动头的数字签名。验证通过则继续;否则锁死或进入下载模式。
  6. 跳转到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外部示波器抓取启动引脚波形,或查看UART
Jump to SBL at 0x80200000
启动时间≤200ms(冷启动)
安全启动签名校验通过在安全场景下,用非法签名的SBL上电,芯片应进入可识别的锁死状态非法签名100%阻挡,不泄露任何用户代码
启动设备优先级正确移除高优设备,PBL自动切换至次优设备并成功启动枚举顺序符合产品设计文档
异常场景可恢复全部枚举失败后,USB下载功能必须可用主机可识别到QHSUSB_BULK设备

3.9 PBL初始化流程总图

PBL初始化流程框架 上电复位 / POR Boot ROM入口执行 硬件自检 & 启动原因 启动设备枚举 枚举成功? 否 进入下载模式 (USB/UART等待刷写) 是 加载SBL Header 解析magic/大小/签名 签名校验 跳转至SBL 图例: 核心执行节点 判断分支