验证 FIT 映像是否在 Linux 用户空间中损坏数据



如何检查 FIT 映像的内容是否在 Linux 用户空间中损坏数据?

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

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

假设图像可作为/dev/flash/bootimage(或作为某些 mtd 块(提供。我试图将该闪存设备dd到一个/tmp/bootimage文件中,并在验证标头但不验证数据的设备上运行mkimage -l

我可以使用dumpimage转储整个拟合图像的特定部分并在其上运行crc32。这在技术上是可行的,但它也需要我将图像作为文件在某处提供(似乎,它无法直接从/dev/flash/bootimagestdin读取(。

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

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

。这意味着我可以将其作为后台任务,该任务每天以非常低的优先级安排一次,并且dd的输出流是校验和的(nice -19 dd if=/dev/flash/bootimage | cksum会这样工作,但我无法判断 cksum 输出是否正确,因为标头本身计入 cksum(

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

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

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

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

最新更新