Изображение против zImage против uImage


86

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

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

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


electronics.stackexchange.com/questions/106958/… не могли бы вы мне помочь в этом контексте?
user3217310

Похоже, ваша проблема связана с тем, как вы следуете при создании файла BOOT.BIN. Тоже пользуюсь ZedBoard, но с такой проблемой не сталкивался.
yildizabdullah

да, я использовал неправильную версию u-boot.elf для создания BOOT.bin
user3217310

1
Главный вопрос о расширенном наборе
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Ответы:


119

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

Изображение : общий файл двоичного образа ядра 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.


1
Мое внимание уделяется zImage = сжатое изображение uImage = Image + uBoot wrapper, поправьте меня, если я ошибаюсь, оболочка uBoot содержит заголовок uBoot и дополнительную информацию, такую ​​как адрес загрузки загрузочного устройства, точка входа, но я не смог найти ссылки, показывающие все формат uImage могли бы вы поделиться ссылками на что
Муин

Спасибо за отзыв, я нашел ресурсы о формате заголовка uImage . Я не понял: 1- где я могу найти адрес загрузки (адрес загрузки загрузочного устройства) и точку входа в uImage (их нет в заголовке) 2- содержит ли zImage эту информацию (адрес загрузки и точка входа), они почему i'am просят о форматах как в zImage и uImage
Муин

«Что я не понял ...» - не пытайтесь начинать обсуждение в комментариях. Разместите новый вопрос.
опилки

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.