Проверьте FIT-образ на предмет повреждения данных в пользовательском пространстве linux
Как я могу проверить содержимое FIT-изображения на предмет повреждения данных в пользовательской среде Linux?
Пример использования: во встроенном приложении у меня есть образ FIT в разделе NAND, и я хочу знать, сможет ли оно загрузиться (без фактической загрузки).
В идеале я бы хотел сделать это без необходимости выгружать весь раздел в файл (так как это съело бы слишком много оперативной памяти или флэш-памяти соответственно).
Допустим, изображение доступно как /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)
1 ответ
U-Boot поставляется с инструментом fit_check_sign. Проверить целостность образа FIT, подписанного RSA, можно следующим образом:
tools/fit_check_sign -f image.fit -k test.dtb
Вы должны предоставить подписанное подходящее изображение и двоичное дерево устройств, содержащее открытый ключ.
Открытый ключ добавляется в дерево устройств, когда вы создаете образ FIT и предоставляете дерево устройств в качестве параметра -K команды tools/mkimage.