我正在尝试编写一个脚本,以便在U-boot上自动运行命令。
我按照网站上的说明[1]。
以下是我的所作所为。
我在NVIDIA Jetson板上编译了脚本并将编译后的文件放入/boot/setenv.img
现在,当我重新启动电路板时,使用以下命令加载脚本映像:
ext2load mmc 0:1 100000 /boot/setenv.img
我得到了以下输出:
1096 bytes read in 403 ms (2 KiB/s)
请注意,当我运行命令imi
时,它会在Jetson主板上报告“找不到命令”。
我使用以下命令运行加载的图像:
source 100000
它给出了以下输出(错误消息):
\## Executing script at 00100000
Wrong image format for "source" command
我的问题是:
为什么source
命令的图像格式不正确?
有没有可以调试错误的方法?
非常感谢有关如何调试错误的任何帮助或建议!
[1] http://www.denx.de/wiki/view/DULG/UBootScripts
非常感谢!
答案 0 :(得分:3)
正如锯末所指出的那样,iminfo
对调试很有帮助 - 所以确保将其编译到U-Boot中。您还可以使用md
命令手动检查标头信息。请记住,mkimage
不会编译任何内容 - 它只是将64字节的元数据添加到文件的开头。
因此,如果您将脚本加载到0x100000的DDR中,则可以通过输入md 0x100000
来查看内存中的该位置。
前四行输出是文件的字节0x0 - 0x40(64字节U-Boot标头)。如果您的标题在那里,您应该看到如下内容:
00100000: 56190527 030b131f eb439a57 de0d0000 '..V....W.C.....
00100010: 00000000 00000000 fc6de331 00060205 ........1.m.....
00100020: 6f747541 616d492d 676e6967 72635320 Auto-Imaging Scr
00100030: 00747069 00000000 00000000 00000000 ipt.............
此标头包含幻数,CRC校验和(一个用于文件,一个用于标头本身),时间戳,文件大小,名称和其他一些内容。所有iminfo
都会解析标题。超过这64个字节应该只是你的纯文本ASCII脚本。
source
命令正在查找使用-t script
中的mkimage
标志生成的标头。当该地址的图像类型错误时,将打印出您收到的错误消息。
答案 1 :(得分:0)
对于未来的读者,需要 CONFIG_LEGACY_IMAGE_FORMAT=y
才能加载 boot.scr
脚本,否则您将收到以下错误消息:
“源”命令的图像格式错误
此外,当启用 CONFIG_FIT_SIGNATURE
时,上述标志将被禁用。来自 Kconfig:
警告:依赖带有所需签名的签名 FIT 图像时 检查默认情况下禁用旧图像格式,以便 无法加载未签名的图像。如果董事会需要遗留图像 在这种情况下格式支持,启用它使用 CONFIG_LEGACY_IMAGE_FORMAT。