Зображення проти zImage проти uImage


83

Яка різниця між ними?

Я знаю, що u-boot потребує ядра у форматі uImage.

Система, яку я використовую, спочатку завантажується з завантажувача першої стадії, а потім викликає u-boot. Я хочу відкинути u-boot та безпосередньо завантажитись із завантажувача першої стадії. Який тип образу ядра я повинен використовувати?


electronics.stackexchange.com/questions/106958/… Ви можете мені допомогти в цьому контексті?
user3217310

Схоже, ваша проблема полягає в тому, як ви слідуєте під час створення файлу BOOT.BIN. Я також використовую ZedBoard, але не стикався з такою проблемою.
yildizabdullah

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

Відповіді:


116

Яка різниця між ними?

Зображення : загальний файл двійкового образу ядра Linux.

zImage : стиснута версія образу ядра Linux, що саморозпаковується.

uImage : файл зображення, який має обгортку U-Boot (встановлену утилітою mkimage ), що включає інформацію про тип ОС та завантажувач.
Дуже поширеною практикою (наприклад, типовий файл ядра Linux Makefile) є використання файлу 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 обгортка, виправте мене, якщо я помиляюся, обгортка uBoot містить заголовок uBoot та додаткові відомості, наприклад, адресу завантаження завантажувального пристрою, точку входу, але я не зміг знайти посилання, які б показували весь текст формат зображення, чи не могли б ви поділитися посиланнями на це
Муен

Дякую за відгук, я знайшов ресурси про формат заголовка uImage . Що я не зрозумів: 1- де я можу знайти адресу завантаження (адреси завантажувального пристрою) та точку входу в uImage (вони не існують у заголовку) 2- чи zImage містить цю інформацію (адреса завантаження) і точка входу), ось чому я запитую про формати як zImage, так і uImage
Mouin

"Те, що я не зрозумів ..." - Не намагайтеся розпочати дискусію в коментарях. Опублікувати нове запитання.
тирса

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.