Bewertung: 1


Die Kandidaten sollten in der Lage sein, Kernel-Komponenten zu benutzen, die für spezifische Hardware, Hardware-Treiber, System-Ressourcen und -Anforderungen notwendig sind. Dieses Prüfungsziel beinhaltet verschiedene Arten von Kernel-Images, die Unterscheidung zwischen stabilen und Entwicklerkernels, Patches und die Benutzung von Kernel-Modulen.

Schlüsseldateien, Begriffe und Hilfsmittel beinhalten:

  • zImage
  • bzImage

Eine der wirklichen Stärken von Linux ist die Tatsache, dass die Quelldateien des Kernels zur Verfügung stehen und somit die Möglichkeit gegeben ist, eigene, sehr spezifische Kernels zu compilieren. Im nächsten Kapitel gehen wir auf die konkreten Anforderungen ein, die notwendig sind, um einen eigenen Kernel zu erstellen. Hier geht es zunächst einmal um die Klärung und Unterscheidung verschiedener Begriffe zu diesem Thema.

Stabile und Entwicklerkernel

Der Linux-Kernel ist grundsätzlich immer „Work in Progress“, also etwas, das sich ständig weiterentwickelt. Dabei gibt es nicht nur die offiziellen Weiterentwicklungen der Linux-Kernel Programmierer, sondern auch einzelne Teile des Kernels, die von Firmen oder Distributoren erstellt und gepflegt werden wie z.B. bestimmte Gerätetreiber.

Grundsätzlich gilt, dass es zwei unterschiedliche Kernel-Versionen gibt. Den stabilen Kernel (stable/production) und den Entwicklerkernel (development/experimental). Die Arbeiten an Neuerungen sollten immer erst im Entwicklerkernel vorgenommen werden, solange bis sich diese Neuerungen als hinlänglich stabil herausstellen. Dann finden sie Eingang in den stabilen Kernel.

Jeder Kernel hat eine Versionsnummer, die dreigeteilt ist. Der erste Teil ist die Major Release Number, also die Hauptnummer des Kernels selbst. Der zweite Teil ist die Versionsnummer, der dritte dann die Nummer der konkreten Ausgabe. Wichtig für die Unterscheidung zwischen stabilem und Entwicklerkernel ist der Mittelteil, der Nummer. Ist diese Nummer ungerade, so handelt es sich um einen Entwicklerkernel, ist sie gerade, so ist es ein stabiler Kernel.

Beispiele für Entwicklerkernel wären also:

  2.1.14
  2.3.33

während stabile Kernel etwa folgende Nummern tragen würden:

  2.2.14
  2.4.1

Der jeweilige mittlere Teil (unterstrichen dargestellt) ist also ausschlaggebend. In der Praxis bedeutet das, dass für wichtige Server oder Workstations, die nicht als Experimentiersystem gedacht sind, sondern an denen gearbeitet wird, darauf geachtet werden sollte, dass stabile Kernelversionen zum Einsatz kommen.

Patches

Ein Patch ist eine Textdatei, die die Unterschiede zwischen Orginal-Code und dem neuen Code enthält plus etwas zusätzlicher Information wie Dateinamen und Zeilennummern. Das Programm patch(1) kann dann den Patch für einen existierenden Quellbaum anwenden.

Zwei Beispiele für eine solche Anwendung wären:

  patch -p0 < patch-file-name-here

Das -p0 beschreibt, auf welcher Ebene des Verzeichnisbaums relativ zu den zu patchenden Dateien wir uns befinden. Das obige Beispiel wäre im Verzeichnis /usr/src gültig. Soll ein Patch direkt im Verzeichnis des entsprechenden Kernels ausgeführt werden, so wäre der Befehl

  patch -p1 < patch-file-name-here

anzuwenden. Das Thema patchen wird uns später noch genauer beschäftigen.

bzImage und zImage

Kerneldateien dürfen eine bestimmte Größe nicht überschreiten, um ladbar zu bleiben. Aus diesem Grund werden Kernels komprimiert abgelegt. Sie entkomprimieren sich beim Laden selbstständig. Es gibt derzeit zwei verschiedene Methoden, die zu unterschiedlichen Ergebnissen führen. Die Kerneldatei heißt entweder zImage oder bzImage. Der Unterschied liegt nicht im Kompressionsalgorithmus, beide benutzen gzip (nicht bzip). Das neuere Modell ist das bzImage. Es nutzt ein unterschiedliches Layout und einen anderen Lade-Algorithmus, hat demzufolge also mehr Kapazität. bzImage steht einfach für Big zImage.

Moderne Kernel können in beiden Formen abgelegt werden, aber es ist praktisch ausgeschlossen, einen einigermaßen aktuellen Kernel noch im zImage-Format zu laden. Aus diesem Grund ist heute das bzImage die Methode der Wahl.