Ответ 1
В чем разница между ними?
Изображение: общий файл двоичного образа ядра Linux.
zImage: сжатая версия образа ядра Linux, который является самораспаковывающимся.
uImage: файл изображения с оболочкой U-Boot (установленный с помощью утилиты mkimage), которая включает в себя информацию о типе ОС и загрузчике.
Очень распространенная практика (например, типичный Linux Makefile для Linux) заключается в использовании файла zImage. Поскольку файл zImage является самораспаковывающимся (т.е. Не требует внешних декомпрессоров), оболочка указывает, что это ядро "не сжато", даже если оно действительно есть.
Обратите внимание, что автор/разработчик U-Boot считает (широко распространенное) использование использования zImage внутри uImage сомнительным:
На самом деле это довольно глупо использовать zImage внутри uImage. это гораздо лучше использовать нормальное (несжатое) изображение ядра, сжать его используя только gzip, и используйте это как poayload для mkimage. Сюда U-Boot делает uncompresiong вместо включения еще одного uncompressor с каждым изображением ядра.
(цитируется https://lists.yoctoproject.org/pipermail/yocto/2013-October/016779.html)
Какой тип изображения я должен использовать?
Вы можете выбрать все, что хотите запрограммировать. Для экономии памяти вы, вероятно, должны выбрать сжатый образ по несжатому. Помните, что выполнение ядра (предположительно ядро Linux) связано не только с загрузкой образа ядра в память. В зависимости от архитектуры (например, ARM) и версии ядра Linux (например, с DTB или без нее) существуют регистры и буферы памяти, которые могут быть подготовлены для ядра. В одном случае была также аппаратная инициализация, которую выполнила U-Boot, которая должна была быть реплицирована.
ДОПОЛНЕНИЕ
Я знаю, что u-boot нуждается в ядре в формате uImage.
Это точно для всех версий U-Boot, у которых есть команда bootm.
Но более поздние версии U-Boot также могут содержать команду bootz, которая может загружать zImage.