6. FIT 镜像安全启动

本章说明 boot.spinorFIT 镜像的验签与可选加密:由 U-Boot 在加载内核与设备树前完成校验或解密。FIT 与 FIP 在 ROM/BL1 侧的职责相互独立;产线常见顺序是先完成 FIT 侧配置与打包,再对 fip.bin 做签名与加密,详见 FIP 签名与加密及 eFuse

除进入 ramdisk/keys 目录后的命令外,其余命令均在 mars 根目录 执行;须先依次执行 source build/envsetup_soc.shdefconfig ,将后者参数换为实际板型名。

6.1. 生成 FIT 验签与加密用的密钥与材料

只做一次,与 FIP 密钥分开保存。FIT 的 RSA 验签使用 私钥公钥证书;若开启 FIT 加密,还需要 AES-256 密钥IV

在 mars 根目录下进入 ramdisk/keys 后执行(与 ramdisk 侧打包脚本约定的路径一致):

cd ramdisk/keys
openssl genpkey -algorithm RSA -out test_reeos.key
openssl req -new -x509 -key test_reeos.key -out test_reeos.crt
openssl rand -out test_reeos_aes256.bin 32
openssl rand -out test_reeos_iv.bin 16

得到:test_reeos.keytest_reeos.crt;若启用 FIT 加密,还有 test_reeos_aes256.bintest_reeos_iv.bin。ITS、打包脚本、U-Boot 环境变量中的路径须与上述文件名及目录一致。

6.2. 打开配置(内核与 U-Boot)

  • 执行 source build/envsetup_soc.shdefconfig``(实际板型名)后运行 ``menuconfig,在 Kernel options 下勾选 Enable kernel secure boot,保存退出。

  • (可选)在 menuconfig 中勾选菜单项 Support FIT image encryption/decryption。勾选后对 FIT 做加密与验签;不勾选则仅验签、不加密。

  • 执行 menuconfig_uboot,进入 Security support,勾选 Add secure boot support to kernel,并确保子项已启用:Enable RSA supportEnable hash commandEnable libcrypto support 等,保存退出。

6.3. 编译与产物

执行 build_all 完成编译。完成后在 install/ 下对应板型的 soc_* 子目录中可得到 boot.spinor 等产物(具体以板级配置为准)。烧录时按现有流程将带签名或加密的 boot.spinor 写入 BOOT 分区。

6.4. FIT 相关密钥一览(ramdisk/keys/)

文件

用途

test_reeos.key

FIT RSA 私钥(签名)

test_reeos.crt

FIT 公钥证书

test_reeos_aes256.bin

FIT AES-256 密钥(32 字节,仅当启用 FIT 加密)

test_reeos_iv.bin

FIT 加密 IV(16 字节,仅当启用 FIT 加密)

6.5. 流程简表(FIT 侧)

步骤

内容

1

ramdisk/keys 下生成 FIT 密钥与证书;可选 AES/IV

2

menuconfig 打开 Enable kernel secure boot;可选 Support FIT image encryption/decryption

3

menuconfig_uboot 打开 Add secure boot support to kernel 及所需子项

4

执行 build_all,取 install 下 boot.spinor 等产物并按原流程烧录 BOOT 分区

6.6. 与 FIP 的配合

  • FIT:保护 boot.spinor 中的 kernel、FDT 等,由 U-Boot 执行。

  • FIP:保护 fip.bin 镜像,含 U-Boot 与 BL2 等,由 ROM/BL1 验签与解密,见 FIP 签名与加密及 eFuse

完整安全启动链路中,通常在完成本章配置并得到 boot.spinor 后,再按 FIP 签名与加密及 eFuse 生成 fip_enc.bin、烧 eFuse 并烧录 FIP 分区。