【问题标题】:Wrong image format for "source" command for U-bootU-boot 的“source”命令的图像格式错误
【发布时间】:2016-07-27 02:14:05
【问题描述】:

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

非常感谢!

【问题讨论】:

  • "有什么方法可以调试错误吗?" -- 使用iminfo命令上报图片头。 "请注意,当我运行命令 imi 时,..." -- 重建 U-Boot 以便 iminfo 命令可用(例如定义 CONFIG_CMD_IMI)。

标签: linux u-boot


【解决方案1】:

正如锯末所指出的,iminfo 将有助于调试 - 因此请确保将其编译到 U-Boot 中。您还可以使用md 命令手动检查标头信息。请记住,mkimage 不会编译任何内容 - 它只是在文件开头添加 64 个字节的元数据。

因此,如果您将脚本加载到 DDR 的 0x100000,您可以通过输入 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 命令正在寻找在mkimage 中使用-t script 标志生成的标头。当该地址的图像类型错误时,将打印您收到的错误消息。

【讨论】:

    【解决方案2】:

    对于未来的读者,CONFIG_LEGACY_IMAGE_FORMAT=y 需要加载 boot.scr 脚本,否则您将收到以下错误消息:

    “源”命令的图像格式错误

    此外,当CONFIG_FIT_SIGNATURE 启用时,上述标志将被禁用。来自 Kconfig:

    警告:当依赖具有所需签名的签名 FIT 图像时 检查默认情况下禁用旧图像格式,以便 无法加载未签名的图像。如果电路板需要旧图像 在这种情况下支持格式,请使用 CONFIG_LEGACY_IMAGE_FORMAT。

    【讨论】:

      猜你喜欢
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2016-09-10
      相关资源
      最近更新 更多