Изображение vs zImage vs uImage

в чем разница между ними?

Я знаю, что u-boot нуждается в ядре в формате uImage.

системы я использую первые сапоги из стадии 1 погрузчик и вызов загрузчика. Я хочу отказаться от u-boot и напрямую загрузиться с загрузчика этапа 1. Какой тип образа ядра я должен использовать?

1 ответов


в чем разница между ними?

изображения: общий файл двоичного образа ядра Linux.

образ zImage: сжатая версия образа ядра Linux, которая является самораспаковывающейся.

uImage: файл образа с оболочкой U-Boot (устанавливается mkimage utility), который включает в себя тип ОС и информацию о загрузчике.
Очень распространенная практика (например, типичная Linux kernel Makefile) - использовать файл zImage. Поскольку файл zImage является самораспаковывающимся (т. е. не нуждается во внешних распаковывателях), оболочка будет указывать, что это ядро "не сжато", хотя на самом деле это так.


обратите внимание, что автор / сопровождающий U-Boot считает (широкое) использование использования zImage внутри uImage сомнительным:

на самом деле довольно глупо использовать zImage внутри uImage. Это гораздо лучше использовать обычный (несжатое) изображение ядра, сжать его используя только gzip, и используйте это как poayload для mkimage. Именно такой образ U-Boot делает uncompresiong вместо включения еще одного uncompressor с каждым изображением ядра.

(цитируется по 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.