Bootsektor des Linux-Kernels (vmlinuz) im x86-System mit bzImage-Format

Bootsektor des Linux-Kernels (vmlinuz) im x86-System mit bzImage-Format

Mit einem HEX-Viewer betrachte ich den vmlinuz-Linux-Kernel 3.14.28 in der X86-Architektur, der im bzImage-Format vorliegt. Der Bootsektor der Datei sieht folgendermaßen aus:

Bildbeschreibung hier eingeben

Es definiert zwei Partitionen: Partition 1 mit Ext2-Dateisystem der Größe 18,9 GB, die aktiv ist, und eine erweiterte Partition ohne logische Partitionen darin. Bedeutet dies, dass der Linux-Kernel davon ausgeht, dass der Benutzer diese beiden Partitionen auf seinem System erstellt hat? Warum hat der Linux-Kernel diese beiden Partitionen definiert?

Antwort1

Dieser Datenblock ist größtenteils ein Relikt aus der Zeit, als Linux von Disketten gebootet wurde und keinen Bootloader benötigte. Es handelt sich zwar um einen Bootsektor, aber der Realmodus-x86-Code sagt bei der Ausführung nur: „Verwenden Sie einen Bootloader. Entfernen Sie die Diskette und drücken Sie eine beliebige Taste, um neu zu starten.“

Die Daten am Ende sind keine Partitionstabelle, aber der Platz am Ende wurde verwendet, um Einstellungen wie den VGA-Modus, das Root-Gerät und einige Flags an den Kernel zu übermitteln. Wenn Sie die Werte etwas genauer untersuchen, werden Sie feststellen, dass sie als Partitionstabelle keinen Sinn ergeben.

Der Bootblock hat jedoch immer noch eine gewisse Bedeutung, weshalb ich oben „größtenteils“ gesagt habe. Der Anfang der Datei ist sorgfältig gestaltet, damit er auch wie eine UEFI-Anwendung aussieht, die es dem Kernel selbst ermöglicht, als sein eigener Bootloader zu fungieren. Die Datei beginnt mit der magischen Zeichenfolge MZ (genau wie eine DOS-EXE) und enthält einen PE/COFF-Header.

verwandte Informationen