3、SDM 固件(SDM Firmware):固件组成、启动 ROM、Bootloader(U-Boot SPL)的作用
在 Agilex SoC 的安全启动与配置体系中,SDM(Secure Device Manager) 是一个独立的硬核子系统,负责整个芯片的初始化、配置与安全管理。SDM 固件并非单一镜像,而是由多个阶段、多个组件构成的层次化软件栈。理解其组成与启动流程,是掌握双镜像安全启动的基础。
3.1 SDM 固件的整体组成
SDM 固件从物理存储介质(如 QSPI Flash、SD/MMC)加载,按阶段依次执行。其核心组件包括:
| 组件 | 存储位置 | 主要功能 |
|---|---|---|
| Boot ROM | SDM 内部 Mask ROM(只读) | 芯片上电后第一条指令执行;初始化 SDM 最小系统;验证并加载 Bootloader |
| Bootloader(U-Boot SPL) | 外部 Flash(QSPI/SD/MMC) | 初始化 DDR、时钟、外设;加载并验证 SDM 固件主镜像(SDM Firmware Image) |
| SDM Firmware Image | 外部 Flash | 完整的 SDM 运行时固件;包含配置管理器、安全服务、热复位管理等模块 |
| Configuration Data | 外部 Flash(与固件镜像打包) | FPGA 配置比特流、HPS 配置数据、时钟配置表等 |
关键概念: Boot ROM 是芯片出厂固化的不可修改代码,是信任根(Root of Trust)的起点。Bootloader 和 SDM Firmware Image 存储在外部 Flash 中,必须通过 Boot ROM 的签名验证后才能执行。
3.2 Boot ROM:信任链的起点
Boot ROM 是 SDM 内部的一块 Mask ROM,芯片上电或复位后,SDM 核心直接从 Boot ROM 开始执行。其核心职责包括:
- 最小系统初始化:配置 SDM 内部时钟、SRAM、基本 I/O 引脚。
- 启动源检测:根据熔丝(Fuses)或 GPIO 配置,确定从 QSPI、SD/MMC 或 NAND 加载 Bootloader。
- 安全验证:使用芯片内建的 SHA-256/384 和 RSA-4096 引擎,验证 Bootloader 的签名与哈希。
- 加载 Bootloader:将验证通过的 Bootloader 从外部 Flash 拷贝到 SDM 内部 SRAM 并跳转执行。
安全要点: Boot ROM 在执行任何外部代码之前,必须完成签名验证。如果验证失败,SDM 会进入安全错误状态,停止启动流程。这是防止恶意固件注入的第一道防线。
3.3 Bootloader(U-Boot SPL)的作用
在 Agilex 平台上,Bootloader 采用 U-Boot SPL(Secondary Program Loader) 实现。SPL 是经过精简的 U-Boot 第一阶段,其代码体积小,适合在 SDM 内部 SRAM 中运行。SPL 的主要任务包括:
- DDR 初始化:配置 DDR 控制器与 PHY,使外部 DDR 内存可用。
- 外设初始化:初始化 Flash 控制器、SD/MMC 控制器、以太网等必要外设。
- 加载 SDM Firmware Image:从 Flash 中读取完整的 SDM 固件镜像到 DDR 中。
- 安全验证接力:对 SDM Firmware Image 进行签名验证(使用 Boot ROM 传递的信任根公钥)。
- 跳转执行:验证通过后,跳转到 DDR 中的 SDM Firmware 入口。
注意: SPL 本身必须由 Boot ROM 验证通过后才能执行。SPL 的代码完整性由 Boot ROM 保证,而 SPL 又负责验证下一阶段的 SDM Firmware Image,形成完整的信任链(Chain of Trust)。
3.4 SDM Firmware Image 的组成
SDM Firmware Image 是一个包含多个组件的复合镜像,通常以 .pof(Programmer Object File) 或 .jic(JTAG Indirect Configuration) 格式存储。其内部结构如下:
| 组件 | 说明 |
|---|---|
| Header | 镜像版本、长度、校验和、签名信息 |
| SDM Core Firmware | SDM 主运行固件,包含配置管理器、安全服务、热复位管理、错误处理等 |
| FPGA Configuration Data | FPGA 比特流,用于配置 FPGA 逻辑 |
| HPS Configuration Data | HPS 侧配置数据,如时钟配置、引脚复用、PLL 设置等 |
| Signature Block | RSA 签名,用于验证镜像完整性 |
3.5 信任链与安全启动流程总结
从 Boot ROM 到 SDM Firmware 的完整信任链如下:
- Boot ROM(硬件信任根)验证 Bootloader(SPL)的签名。
- Bootloader(SPL) 验证 SDM Firmware Image 的签名。
- SDM Firmware 验证 FPGA 配置数据与 HPS 配置数据的完整性。
- 所有验证通过后,FPGA 与 HPS 才能进入用户模式。
安全启动核心原则: 每一级只执行经过上一级验证的代码,且验证密钥由硬件熔丝保护,不可篡改。任何一级验证失败,启动流程立即终止,芯片进入安全锁定状态。
3.6 常见问题与避坑指南
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Boot ROM 无法加载 Bootloader | 启动源配置错误或 Flash 损坏 | 检查熔丝/GPIO 配置;重新烧录 Flash |
| Bootloader 签名验证失败 | 公钥不匹配或镜像被篡改 | 确认使用正确的签名密钥;重新生成签名镜像 |
| SPL 无法初始化 DDR | DDR 参数配置错误或硬件问题 | 核对 DDR 数据手册;检查硬件焊接 |
| SDM Firmware Image 加载失败 | Flash 地址偏移错误或镜像损坏 | 确认 Flash 分区表;重新烧录镜像 |