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 会进入安全错误状态,停止启动流程。这是防止恶意固件注入的第一道防线。
Boot ROM 启动流程 Boot ROM 启动流程 上电 / 复位 最小系统初始化(时钟/SRAM/IO) 启动源检测(熔丝/GPIO) 加载并验证 Bootloader(RSA/SHA) 跳转执行 Bootloader

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 签名,用于验证镜像完整性
SDM Firmware Image 结构 SDM Firmware Image 结构 SDM Firmware Image(.pof / .jic) Header(版本 / 长度 / 校验和) SDM Core Firmware(配置管理器 / 安全服务 / 热复位管理) FPGA Configuration Data(比特流) HPS Configuration Data(时钟 / PLL / 引脚复用) Signature Block(RSA-4096 签名)

3.5 信任链与安全启动流程总结

从 Boot ROM 到 SDM Firmware 的完整信任链如下:

  1. Boot ROM(硬件信任根)验证 Bootloader(SPL)的签名。
  2. Bootloader(SPL) 验证 SDM Firmware Image 的签名。
  3. SDM Firmware 验证 FPGA 配置数据与 HPS 配置数据的完整性。
  4. 所有验证通过后,FPGA 与 HPS 才能进入用户模式。
安全启动核心原则: 每一级只执行经过上一级验证的代码,且验证密钥由硬件熔丝保护,不可篡改。任何一级验证失败,启动流程立即终止,芯片进入安全锁定状态。

3.6 常见问题与避坑指南

问题 原因 解决方案
Boot ROM 无法加载 Bootloader 启动源配置错误或 Flash 损坏 检查熔丝/GPIO 配置;重新烧录 Flash
Bootloader 签名验证失败 公钥不匹配或镜像被篡改 确认使用正确的签名密钥;重新生成签名镜像
SPL 无法初始化 DDR DDR 参数配置错误或硬件问题 核对 DDR 数据手册;检查硬件焊接
SDM Firmware Image 加载失败 Flash 地址偏移错误或镜像损坏 确认 Flash 分区表;重新烧录镜像