U-boot的“source”命令的图像格式错误

时间:2016-07-27 02:14:05

标签: linux u-boot

我正在尝试编写一个脚本,以便在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

非常感谢!

2 个答案:

答案 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。