**目标:**
我们的目标是使用 `imx_usb` 加载程序绕过 eMMC 将我们的主板直接启动到 RAM 中。这是我们进行故障分析的关键一步。我们已经物理断开了生产板上的 eMMC 连接,以确保我们只测试 USB 启动路径。
**Board States:**
1. **开发板:** 熔丝未熔断。SoC 报告说它处于**开发模式**。
2。**制作板:** 熔丝已熔断,可安全启动。系统芯片报告已进入**生产模式**。
**结果摘要:***
在使用 `imx_usb` 工具时,我们观察到两种不同的结果。
**1.成功:开发板** 在我们的开发板
上,有一个未签名的 `u-boot.imx`加载并完美执行。日志确认二进制文件已加载并且 SoC 跳转到入口点。
* 命令:** `sudo ./imx_usbu-boot.imx`
** 主要日志输出(`development.txt`):**
```
HAB 安全状态:开发模式 (0x56787856)...
加载二进制文件 (u-boot.imx)到 877ff400,skip=0,fsize=5faa4 type=aa
成功(状态 0x88888888)跳转到 0x877ff400 ```*(结果:主板启动到 U-Boot 提示符)*
**2.故障:制作板** 在我们的制作板
上,我们使用**签名的 `u-boot.imx``**由我们的制造团队提供,使用相同的密钥签名,其哈希值在 SoC 中融合。`imx_usb`工具报告说 DCD 和二进制文件已成功加载。但是,最后的跳转命令失败了。
* 命令:** `sudo ./imx_usbu-boot-signed.imx`
** 关键日志输出(`production.txt`):**
```
HAB 安全状态:生产模式 (0x12343412)...
正在加载二进制文件 (u-boot.imx)到 877ff400,skip=0,fsize=5faa4 type=aa
成功(状态 0x88888888)在 err=0 中
跳到 0x8
77ff400 j4,last_trans=64 33 18 c0 00 ```*(结果:板无法启动。
无控制台输出)*
**分析和关键问题:***
关键区别在于 "跳转到 0x877ff400 "命令的结果。在生产板上,在映像成功传输到RAM之后,该过程在此时刻失败。这强烈表明 SoC 的启动 ROM 在*执行之前,正在对 RAM 中的映像执行**HABv4 签名验证**,但该验证失败了。
j4 err` 不是标准 USB 错误;它似乎是与跳转命令有关的 `imx_usb` 工具的内部状态代码。核心问题是跳跃不成功。
1。**HAB 身份验证失败:** “j4 错误”(或随后的无法启动)是否表示 HAB 身份验证失败?启动 ROM 成功接受了该映像,但似乎拒绝运行该映像。
2。**USB 启动的映像签名:** 对打算通过 USB 串行下载协议加载的 U-Boot 映像进行签名是否有特定的要求或格式?我们正在使用签名的 eMMC 启动镜像。预期的 IVT(图像矢量表)结构或其他元数据是否存在差异,导致 HAB 在以 `0x877ff400` 加载图像时拒绝图像?
3.**加载地址:** 图像正在加载到 `0x877ff400`。这是安全 i.MX6 上 USB 加载映像的正确地址吗?启动 ROM 是否期望映像在 RAM 中的不同位置进行身份验证?
你好
您的签名映像是为eMMC启动而构建的吗?
错误显示加载到 RAM 的步骤已成功,但由于一个
HAB 验证失败。
使用 imx_usb_loader(串行下载协议),我们成功地从 RAM 完全启动 U-Boot 和 Linux。从那次 U-Boot 实时会话中,我们将以下镜像写入了 eMMC:
# U-Boot IVT 强制位于 1 KiB 硬件偏移处
mmc dev 1 0
mmc 写入 0x82000000 0x2 0x400
# 将镜像适配到活动分区之外的原始扇区
mmc 写入 0x80800000 0x66000 0x3000
# 启动环境
setenv bootargs "console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw"
setenv loadfit "mmc dev 1 0; mmc read 0x80800000 0x66000 0x3000"
setenv bootcmd "run loadfit; bootz 0x808000e8 - 0x80da4bc0"
saveenv
从 U-Boot 提示符手动执行 run boot 命令可以正常工作——Linux 可以启动并挂载 /dev/mmcblk1p2,没有任何问题。邮件中附有工作日志。
故障状态:
在任何冷启动或硬件复位时,即使 USB OTG 电缆物理断开,电路板也不会产生任何 UART 输出,并且会静默地重新进入 USB 串行下载模式。ROM 似乎从未到达 eMMC。
大家好,请问这个工单目前状态如何?如何才能推进进度?是否需要进行面对面(现场)会议?
你好
是的,镜像已签名,可用于emmc启动。在内存中运行完美,但无法刷入 eMMC。