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