1

如何检查 FIT 图像的内容以防止 linux 用户空间中的数据损坏?

用例:在嵌入式应用程序中,我在 NAND 分区中有一个 FIT 映像,我想知道它是否能够启动(而不实际启动它)。

理想情况下,我想这样做而不需要将整个分区转储到文件中(因为这会分别消耗太多的内存或闪存)。

假设图像可用作/dev/flash/bootimage(或某些 mtd 块)。我试图dd将该闪存设备放入一个/tmp/bootimage文件并mkimage -l在验证标题但验证数据的文件上运行。

我可以dumpimage用来转储整个适合图像的特定部分并在其上运行 crc32。这在技术上是可行的,但它也需要我在某处将图像作为文件提供(似乎,它不能直接读取/dev/flash/bootimage或读取stdin)。

我的目标实际上是这样的:

nice -19 dd if=/dev/flash/bootimage | verifybootimage

...这意味着我可以使它成为一个后台任务,该任务每天安排一次,优先级非常低,并且输出流dd是校验和(nice -19 dd if=/dev/flash/bootimage | cksum会像那样工作,但我无法判断 cksum 输出是否正确,因为标头本身很重要进入 cksum)

4

1 回答 1

1

U-Boot 带有一个工具 fit_check_sign。您可以像这样检查 RSA 签名的 FIT 图像的完整性:

tools/fit_check_sign -f image.fit -k test.dtb

您必须提供签名的拟合图像和包含公钥的二进制设备树。

当您创建 FIT 映像并将设备树作为命令工具/mkimage 的参数 -K 提供时,公钥将添加到设备树中。

于 2019-12-11T11:31:42.383 回答