你好,
我正在为 i.MX RT1050 MCU 开发安全启动实现,并希望实现双映像身份验证 ——一个用于第二阶段引导加载程序,另一个用于应用程序映像,两者都位于外部闪存中。
SRK、IMG 和 CSF 证书使用恩智浦安全配置工具 (SPT) 生成。
第二阶段引导加载程序由 ROM 使用 HAB 进行签名和验证。
应用程序映像在启动加载程序后存储在外部闪存中,可独立更新(如通过 USB 或 OTA)。
第二态引导加载程序会调用ROM HAB 应用程序接口(API),以在执行前验证应用程序映像。
两个镜像(引导加载程序 + 应用程序)都使用相同的 SRK/CSF 密钥集签名。
在第二阶段引导加载程序中,我调用了 HAB 身份验证,如下所示:
load_addr = (uint32_t) hab_authenticate_image_no_dcd(1,ivt_offset,image_start,字节);
hab_image_entry_f hab_authenticate_image_no_dcd (uint8_t cid、uint32_t ivt_t 起始、大小_t 字节)
{
返回 g_habrvtTree-> authenticate_image_no_dcd (cid、ivt_offset、(void **) & 开始,(size_t *) &
字节,空值);}
身份验证有效 — 该函数返回有效的重置处理程序地址,以确认图像已成功验证。
验证成功后,我使用 hab_rvt_report_status() 和 hab_rvt_report_event() 查询 HAB 状态和事件日志。
虽然身份验证通过了,但我始终收到HAB 警告,而不是 HAB_SUCCESS。
输出示例:
Hab rvt 报告状态 = 0x69,配置 = 0xcc,状态 = 0x99
报告事件 #0-> 0xf0
[HAB EVENT #0](44 字节):
DB 00 2C 43 69 0A C0 00 CA 00 24 00 02 C5 1B 00...
根据HAB4 文档对这一事件进行解码时,它表示
0x69 → 警告
0x0A → 不支持的引擎
0xC0 → 在 hab_rvt.run_csf() 中记录的事件
序列 02 C5 1B 00 映射到
图像密钥验证索引
协议:HAB_PCL_CMS
发动机DCP
默认配置
由此我明白,ROM 报告 "警告 "是因为它试图在 CSF 执行期间使用 DCP 引擎,但 DCP 在我的第二阶段引导加载器上下文中没有正确初始化或可用。
我使用 SDK 驱动程序手动初始化了 DCP:
(启用所有通道和默认设置)
但是,警告仍然存在 - 验证成功,但事件日志仍然报告 "不支持引擎 (DCP)"。
在初级 HAB 验证SSB 过程中,ROM 如何初始化和使用 DCP?
手动调用 HAB ROM 应用程序接口时,会出现这种警告吗?
感谢您的联系!
在深入研究之前,您能否手动修改 BD 文件,将 Header_Engine 设为 "any"?然后把结果告诉我
编辑:更新bd文件后,如上所示,再次版本镜像,注意SPT在版本映像时自动生成BD文件按钮。为了避免这种情况,您可以在项目工作区手动运行 build_image 脚本。然后将新图像写入处理器。
如果您发现任何变化,请告诉我。
迪亚戈