2. SDM固件组成:分区结构与职责

Secure Device Manager(SDM)是Agilex SoC FPGA中负责安全启动、固件升级和系统管理的核心硬件模块。SDM固件并非单一二进制文件,而是由多个具有明确职责的分区构成。理解这些分区的结构与功能,是掌握双镜像安全启动与固件升级流程的基础。

2.1 SDM固件分区总览

SDM固件在物理存储(如QSPI Flash)上采用分区布局,从上电复位到固件加载执行,遵循严格的层级依赖关系。整个固件体系分为三个主要分区:Boot ROM、Bootloader 和 Firmware。

分区名称 存储位置 可更新性 核心职责
Boot ROM SDM内部Mask ROM(掩膜只读存储器) 不可更新(硬件固化) 芯片上电后的第一条指令执行;硬件初始化;验证并加载Bootloader
Bootloader QSPI Flash(或NAND/NOR)的固定起始区域 可更新(需安全签名) 初始化外部存储器;验证并加载Firmware;提供恢复与回退逻辑
Firmware QSPI Flash(主镜像与备份镜像区域) 可更新(双镜像机制) 实现SDM运行时服务:配置FPGA、管理HPS复位、处理升级请求、执行安全策略
关键概念: Boot ROM 是信任根(Root of Trust, RoT),其代码由芯片制造商在流片时写入,无法被篡改。整个安全启动链的信任基础建立在Boot ROM的不可变性之上。

2.2 分区职责详解

2.2.1 Boot ROM — 不可变的信任根

Boot ROM是SDM固件启动的第一阶段。芯片上电或复位后,SDM硬件直接跳转到Boot ROM的起始地址执行。其职责包括:

  • 最小硬件初始化: 配置SDM内部时钟、复位状态、基本安全引擎(如SHA/ECC加速器)。
  • Bootloader定位与加载: 从预定义的QSPI Flash偏移地址(通常为0x0000_0000)读取Bootloader头部和镜像。
  • Bootloader完整性验证: 使用硬件加速器验证Bootloader的数字签名(RSA/ECDSA)和哈希值。验证失败则进入安全错误状态。
  • 安全策略实施: 检查安全熔丝(eFuse)状态,决定是否允许调试接口或非安全启动。

2.2.2 Bootloader — 固件加载器与恢复代理

Bootloader是Boot ROM与主Firmware之间的桥梁。它由Boot ROM验证通过后加载到SDM内部SRAM中执行。其职责包括:

  • 外部存储器初始化: 配置QSPI控制器、时钟频率和I/O引脚,确保可以访问Flash。
  • Firmware镜像选择: 读取双镜像区域的状态标志(如版本号、校验状态),决定加载主镜像还是备份镜像。
  • Firmware验证: 验证Firmware镜像的签名和哈希,确保镜像未被篡改且来源可信。
  • 恢复与回退逻辑: 如果主镜像验证失败,自动尝试加载备份镜像;若备份镜像也失败,则进入固件恢复模式(等待外部升级)。
安全注意: Bootloader本身必须经过Boot ROM的签名验证。如果Bootloader被破坏或替换为恶意版本,整个安全启动链将失效。因此,Bootloader的更新必须通过安全升级流程(如经签名的固件升级包)进行。

2.2.3 Firmware — SDM运行时服务

Firmware是SDM固件的主体,负责所有运行时功能。它由Bootloader验证通过后加载并执行。其职责包括:

  • FPGA配置管理: 解析FPGA位流(Bitstream),通过配置总线(如Avalon-ST)将位流加载到FPGA核心。
  • HPS(Hard Processor System)复位与启动: 控制HPS的复位序列,加载HPS的早期启动代码(如U-Boot SPL)。
  • 固件升级服务: 接收并处理来自主机(通过JTAG、SPI或PCIe)的固件升级请求,执行镜像写入、校验和激活操作。
  • 安全策略执行: 管理安全熔丝、密钥存储、防回滚保护(Rollback Protection)和生命周期状态。
  • 错误处理与日志: 记录启动过程中的错误状态,提供调试接口。

2.3 SDM固件分区启动流程

下图展示了从芯片上电到Firmware运行完成的完整启动流程,清晰体现了三个分区的协作关系。

SDM固件分区启动流程 Boot ROM 硬件固化 / 信任根 最小初始化 → 验证Bootloader Bootloader Flash初始化 / 镜像选择 验证Firmware → 回退逻辑 Firmware 运行时服务 FPGA配置 / HPS启动 / 升级 验证失败 → 回退/恢复 QSPI Flash 存储布局 [Bootloader区域] → [主Firmware镜像] → [备份Firmware镜像] → [用户数据] 安全边界与信任链 Boot ROM(硬件信任根)→ 验证 → Bootloader → 验证 → Firmware 每一级在加载下一级之前必须完成签名验证,形成不可中断的安全链

2.4 分区职责对比总结

下表从多个维度对比三个分区的关键差异,帮助理解各自在安全启动体系中的角色。

对比维度 Boot ROM Bootloader Firmware
存储介质 Mask ROM(芯片内部) QSPI Flash(外部) QSPI Flash(外部)
代码大小 通常 < 64 KB 通常 64 KB ~ 256 KB 通常 256 KB ~ 2 MB
更新方式 不可更新 安全升级包(需签名) 双镜像升级(主/备切换)
验证对象 验证Bootloader 验证Firmware 验证FPGA位流与HPS代码
失败后果 芯片无法启动(硬件失效) 进入恢复模式 回退到备份镜像
安全等级 最高(不可篡改) 高(受签名保护) 高(受签名与双镜像保护)
设计要点: 在Agilex双镜像安全启动方案中,Bootloader负责实现镜像选择逻辑。开发者需要在Bootloader中维护一个“镜像状态表”,记录主镜像和备份镜像的版本号、校验结果和激活计数。Firmware升级完成后,通过更新该状态表来触发下一次启动时的镜像切换。