Bild vs zImage vs uImage

83

Was ist der Unterschied zwischen ihnen?

Ich weiß, dass U-Boot einen Kernel im uImage-Format benötigt.

Das System, das ich benutze, bootet zuerst vom Stage 1-Loader und ruft dann U-Boot auf. Ich möchte U-Boot verwerfen und direkt vom Stage 1-Loader booten. Welche Art von Kernel-Image muss ich verwenden?

yildizabdullah
quelle
electronic.stackexchange.com/questions/106958/… können Sie mir in diesem Zusammenhang helfen?
user3217310
Es sieht so aus, als ob Ihr Problem darin besteht, wie Sie beim Erstellen der BOOT.BIN-Datei vorgehen. Ich benutze auch ZedBoard, hatte aber kein solches Problem.
Yildizabdullah
Ja, ich habe eine falsche Version von u-boot.elf verwendet, um die BOOT.bin zu erstellen
user3217310
1
Die ultimative Frage der Obermenge: unix.stackexchange.com/questions/5518/…
Ciro Santilli 20 冠状 病 六四 事件 20

Antworten:

116

Was ist der Unterschied zwischen ihnen?

Image : Die generische binäre Linux-Kernel-Image-Datei.

zImage : Eine komprimierte Version des Linux-Kernel-Images, die sich selbst extrahiert.

uImage : Eine Image-Datei mit einem U-Boot-Wrapper (vom Dienstprogramm mkimage installiert ), der den Betriebssystemtyp und die Loader-Informationen enthält.
Eine sehr verbreitete Praxis (z. B. das typische Makefile des Linux-Kernels) ist die Verwendung einer zImage-Datei. Da eine zImage-Datei sich selbst extrahiert (dh keine externen Dekomprimierer benötigt), würde der Wrapper anzeigen, dass dieser Kernel "nicht komprimiert" ist, obwohl dies tatsächlich der Fall ist.


Beachten Sie, dass der Autor / Betreuer von U-Boot die (weit verbreitete) Verwendung eines zImage in einem uImage für fragwürdig hält:

Eigentlich ist es ziemlich dumm, ein zImage in einem uImage zu verwenden. Es ist viel besser, ein normales (unkomprimiertes) Kernel-Image zu verwenden, es mit nur gzip zu komprimieren und dieses als Poayload für mkimage zu verwenden. Auf diese Weise führt U-Boot die Dekomprimierung durch, anstatt jedem Kernel-Image einen weiteren Komprimierer hinzuzufügen.

(zitiert aus https://lists.yoctoproject.org/pipermail/yocto/2013-October/016778.html )


Welche Art von Kernel-Image muss ich verwenden?

Sie können wählen, wofür Sie programmieren möchten.
Aus Gründen der Speicherersparnis sollten Sie wahrscheinlich ein komprimiertes Bild dem unkomprimierten vorziehen.
Beachten Sie, dass das Ausführen des Kernels (vermutlich des Linux-Kernels) mehr beinhaltet als nur das Laden des Kernel-Images in den Speicher. Abhängig von der Architektur (z. B. ARM) und der Linux-Kernelversion (z. B. mit oder ohne DTB) müssen möglicherweise Register und Speicherpuffer für den Kernel vorbereitet werden. In einem Fall gab es auch eine Hardware-Initialisierung, die U-Boot durchführte und die repliziert werden musste.

NACHTRAG

Ich weiß, dass U-Boot einen Kernel im uImage-Format benötigt.

Dies gilt für alle Versionen von U-Boot, die nur den Befehl bootm haben .
Neuere Versionen von U-Boot können jedoch auch den Befehl bootz enthalten , mit dem ein zImage gestartet werden kann.

Sägespäne
quelle
1
Mein Verständnis ist zImage = komprimiertes Image uImage = Image + uBoot-Wrapper. Korrigieren Sie mich, wenn ich falsch liege. Der uBoot-Wrapper enthält den uBoot-Header und zusätzliche Informationen wie Ladeadresse des Startgeräts, Einstiegspunkt, aber ich konnte keine Referenzen finden, die das Ganze anzeigen Format eines Bildes könnten Sie bitte Links dazu teilen
Mouin
Vielen Dank für das Feedback. Ich habe Ressourcen zum uImage-Header-Format gefunden . Was ich nicht verstanden habe ist: 1- Wo finde ich die Ladeadresse (Ladeadressen des Startgeräts) und den Einstiegspunkt im uImage (sie sind nicht im Header vorhanden) 2- enthält ein zImage diese Informationen (Ladeadresse) und Einstiegspunkt), deshalb frage ich nach den Formaten eines zImage und eines uImage
Mouin
"Was ich nicht verstanden habe ..." - Versuchen Sie nicht, eine Diskussion in Kommentaren zu beginnen. Stellen Sie eine neue Frage.
Sägemehl
OK: Link
Mouin