Zum Inhalt springen

Vmlinux

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 15. April 2025 um 14:06 Uhr durch Invisigoth67 (Diskussion | Beiträge) (form). Sie kann sich erheblich von der aktuellen Version unterscheiden.

vmlinux ist eine statisch gelinkte, ausführbare Datei, die den Linux-Kernel in einem der Objektdatei-Formate die durch Linux unterstützt werden, zu denen das ELF-Format und das COFF-Format gehören, beinhaltet. Die vmlinux-Datei kann für das Kernel-Debugging, die Generierung von Symboltabellen oder andere Operationen erforderlich sein, muss aber vor der Verwendung als Betriebssystem-Kernel durch Hinzufügen eines Multiboot-Headers, eines Bootsektors und von Setup-Routinen bootfähig gemacht werden.

Etymologie

Bei UNIX-Plattformen wird das Kernel-Image traditionell /unix genannt. Mit der Entwicklung des virtuellen Speichers erhielten Kernel, die diese Funktion unterstützten, das Präfix vm-, um sie zu unterscheiden. Der Name vmlinux ist eine Abwandlung von vmunix, während bei vmlinuz der Buchstabe z am Ende anzeigt, dass es komprimiert ist (z. B. gzipped).[1]

Position

Traditionell befand sich der Kernel im Wurzelverzeichnis der Dateisystemhierarchie; da der Bootloader jedoch BIOS-Treiber verwenden muss, um auf die Festplatte zuzugreifen, waren aufgrund von Beschränkungen auf einigen i386-Systemen nur die ersten 1024 Zylinder der Festplatte adressierbar.

Um dieses Problem zu lösen, haben die Linux-Distributoren den Benutzern empfohlen, am Anfang ihrer Laufwerke eine Partition speziell für die Speicherung von Bootloader- und kernelbezogenen Dateien anzulegen. GRUB, LILO und SYSLINUX sind gängige Bootloader.

Konventionell wird diese Partition in der Dateisystemhierarchie als /boot eingebunden. Dies wurde später durch den Filesystem Hierarchy Standard (FHS) standardisiert, der nun vorschreibt, dass sich das Linux-Kernel-Image entweder in / oder /boot befinden muss, obwohl es keine technische Einschränkung gibt, die dies erzwingt.[2]

Kompression

Traditionell wird der Kernel bei der Erstellung eines bootfähigen Kernel-Images auch mit gzip oder, seit Linux 2.6.30,[3] mit LZMA oder bzip2 komprimiert, was einen sehr kleinen Dekomprimierungsstub erfordert, der in das resultierende Image aufgenommen wird. Der Stub dekomprimiert den Kernelcode, wobei auf einigen Systemen Punkte auf der Konsole ausgegeben werden, um den Fortschritt anzuzeigen, und setzt dann den Bootvorgang fort. Unterstützung für LZO,[4] xz,[5] LZ4[6] und zstd[7] Kompression wurde später hinzugefügt.

Die Dekomprimierungsroutine ist ein vernachlässigbarer Faktor für die Bootzeit, und vor der Entwicklung von bzImage waren die Größenbeschränkungen einiger Architekturen, insbesondere i386, extrem einschränkend, so dass die Komprimierung eine Notwendigkeit war.

Auf der SPARC-Architektur wird die vmlinux-Datei mit einfachem gzip komprimiert, da der SILO-Bootloader gzipped Images transparent dekomprimiert.

Der Dateiname des bootfähigen Images ist nicht wichtig, aber viele beliebte Distributionen verwenden vmlinuz.

bzImage

Mit der Weiterentwicklung des Linux-Kernels wuchs die Größe der von den Benutzern erzeugten Kernel über die Grenzen einiger Architekturen hinaus, bei denen der verfügbare Speicherplatz für den komprimierten Kernel-Code begrenzt ist. Das bzImage (big zImage)-Format wurde entwickelt, um diese Beschränkung zu überwinden, indem der Kernel auf nicht zusammenhängende Speicherbereiche aufgeteilt wurde.

Das bzImage wurde bis Linux 2.6.30 mit gzip komprimiert,[8] wodurch weitere Algorithmen eingeführt wurden. Obwohl das Präfix bz vermuten lässt, dass die bzip2-Komprimierung verwendet wird, ist dies nicht der Fall.[9] (Das bzip2-Paket wird oft mit Werkzeugen verteilt, denen das Präfix bz vorangestellt ist, wie bzless, bzcat usw.)

Die bzImage-Datei hat ein spezielles Format. Sie enthält die verketteten Dateien bootsect.o + setup.o + misc.o + piggy.o.[10] piggy.o enthält die gzipped vmlinux-Datei in ihrem Datenteil. Das Skript extract-vmlinux, das sich unter scripts/ in den Kernel-Quellen befindet, dekomprimiert ein Kernel-Image. Einige Distributionen (z. B. Red Hat und Klone) werden mit einem kernel-debuginfo RPM ausgeliefert, das die vmlinux-Datei für das passende Kernel-RPM enthält, und es wird normalerweise unter /usr/lib/debug/lib/modules/`uname -r`/vmlinux oder /usr/lib/debug/lib64/modules/`uname -r`/vmlinux installiert.

Einzelnachweise

  1. vmlinuz Definition. Abgerufen am 15. April 2025.
  2. Filesystem Hierarchy Standard. Abgerufen am 15. April 2025.
  3. Linux_2_6_30 - Linux Kernel Newbies. Abgerufen am 15. April 2025.
  4. Making sure you're not a bot! Abgerufen am 15. April 2025.
  5. Linux_2_6_38 - Linux Kernel Newbies. Abgerufen am 15. April 2025.
  6. Linux_3.11 - Linux Kernel Newbies. Abgerufen am 15. April 2025.
  7. Linux_5.9 - Linux Kernel Newbies. Abgerufen am 15. April 2025.
  8. Linux_2_6_30 - Linux Kernel Newbies. Abgerufen am 15. April 2025.
  9. vmlinuz Definition. Abgerufen am 15. April 2025.
  10. LKML: Yann DRONEAUD: Re: bzImage decompression. Abgerufen am 15. April 2025.