ZenWalk - Kernel kompilieren

Den Linux-Kernel neu kompilieren, einerseits eine recht komplexe und andererseits auch recht einfache Angelegenheit.

Dieser Artikel ist eine Ergänzung von ZenWalk - Suspend2disk [1] und geht speziell auf die Aktivierung der LZF Komprimierung für die Verwendung mit Suspend2disk ein. Alle Arbeiten werden in der Shell als root ausgeführt.

1. Vorbereitung

Die Kernelquellen mit netpkg installieren. Nach der Installation des Paketes befinden sich die Kernelquellen im Verzeichnis /usr/src.

Hinweis: Die Kernelversion der Kernelquellen muss der Version des bereits installierten Kernel entsprechen.

Aktuell installierten Kernel ermitteln:

uname -r

2. Kernel kompilieren

2.1. Konfiguration des Kernel

Um den Kernel für eine Kompilierung neu zu konfigurieren können in der Shell mehrere verschiedene Befehle aufgerufen werden, um ein Konfigurationsinterface zu starten. Mögliche Befehle sind make gconfig, make xconfig oder make menuconfig. Mit allen 3 Programmen wird die Konfigurationsdatei des Kernel, die Datei /usr/src/kernelversion/.config bearbeitet. Meist bereitet die Verwendung von make menuconfig keine Probleme wegen eventuell fehlender abhängiger Programme. Beim Aufruf von make menuconfig ist zu beachten, daß das Shellfenster nicht zu schmal ist - am Besten ist Bildschirmfüllend.

Um make menuconfig zu starten muss in das Kernelverzeichnis gewechselt werden:

root[zenwalk]# cd /usr/src/linux-2.6.17.11

root[linux-2.6.17.11]# make menuconfig

Nach dem Aufruf von make menuconfig erscheint die Startseite des Konfigurationsinterface.

Kernel menuconfig 1
Bild: Menu config 1, groß

Jetzt kann man sich mit den Pfeiltasten im Menü bewegen. Mit wiederholtem Exit gelangt man aus jeder beliebigen Menütiefe zurück auf die Startseite. Wenn man die Startseite mit Exit verlässt und die Frage nach der Sicherung verneint passiert nichts. Die Konfigurationsdatei des Kernel wird nicht verändert. Erst wenn man nach dem Verlassen der Startseite, egal ob eventuelle Änderungen gesichert werden oder nicht, den Befehl make anwendet beginnt die Kompilierung des Kernel.

Kernel menuconfig 2
Bild: Menu config 2, groß

 

Kernel menuconfig 3
Bild: Menu config 3, groß


2.2. Kompilieren des Kernel

Nach der Bestätigung mit Yes kann es mit dem Kompilieren losgehen. Ein einfaches make

root[linux-2.6.17.11]# make

löst das Kompilieren aus. Dieser Vorgang dauert je nach Leistung des Prozessor einige Zeit. Während des Kompilierens werden verschiedene Warnungen gezeigt. Diese kann man ignorieren - sie laufen durch. Erst bei einem Error bricht das Kompilieren ab.
Ist der Rechner mit Kompilieren fertig steht die Shell in der Zeile

root[linux-2.6.17.11]#

3. neuen Kernel verwenden

Nachdem der Kernel neu kompiliert wurde muss der neue Kernel dem System zur Verwendung beim Booten verfügbar gemacht werden. Dafür werden verschiedene Dateien aus dem Verzeichnis der Kernelsourcen in das Verzeichnis des Bootmanagers kopiert und die Konfiguration des Bootmanagers muss dahingehend modifiziert werden, daß man ZenWalk unter Verwendung des neuen Kernel booten kann.

Hinweis: Wenn man den alten Kernel /boot/vmlinuz-2.6.17.11 mit dem neu kompilierten Kernel /usr/src/linux-2.6.17.11/arch/i386/boot/bzImage vergleicht sollten beide eine fast identische Dateigröße haben. Die Datei bzImage ist der Kernel. Ein beträchtlicher Unterschied der Dateigrößen ist ein Hinweis auf einen Fehler beim Kompilieren und der neu erstellte Kernel sollte nicht verwendet werden. In diesem Falle wiederholt man die Kompilierung und versucht den Fehler zu finden.

Ich beschreibe die Verwendung des neuen Kernel im Zusammenhang mit dem Einsatz des Bootmanager Grub [2]. Anwender von Lilo können die nachfolgenden Erläuterungen bezüglich des Bootmanager nicht verwenden.

3.1. Dateien des neuen Kernel zum Bootmanager kopieren

Alle benötigten Dateien werden in das Verzeichnis /boot kopiert. Die sich dort befindenden Dateien der alten Kernelversion sollten dabei nicht überschrieben werden! Damit schafft man sich die Option, im Notfall des nicht startenden ZenWalk mit dem neuen Kernel das System alternativ mit dem alten Kernel starten zu können.

Bevor man mit dem Kopieren der Dateien beginnt verschafft man sich einen Überblick im Zielverzeichnis. Dadurch wird ermittelt, wie die Dateinamen der 3 neuen Dateien lauten müssen. Beispiel von /boot einer frischen ZenWalk-Installation:

ls -l /boot
lrwxrwxrwx 1 root root 37 2006-09-16 05:44 README.initrd -> /usr/doc/mkinitrd-1.0.1/README.initrd
-rw-r--r-- 1 root root 839595 2006-09-16 05:55 System.map
-rw-r--r-- 1 root root 839595 2006-09-05 16:35 System.map-2.6.17.11
-rw-r--r-- 1 root root 512 2006-09-16 05:56 boot.0300
-rw-r--r-- 1 root root 209 2006-09-16 05:56 boot_message.txt
-rw-r--r-- 1 root root 46695 2006-09-16 05:55 config
-rw-r--r-- 1 root root 46695 2006-09-05 16:35 config-2.6.17.11
drwxr-xr-x 2 root root 4096 2006-09-19 21:16 grub
-rw-r--r-- 1 root root 546619 2006-07-13 15:26 initrd.splash
-rw------- 1 root root 52736 2006-09-16 05:56 map
-rw-r--r-- 1 root root 10666 2006-07-01 10:32 splash.bmp
-r-------- 1 root root 1841869 2006-09-16 05:55 vmlinuz
-rw-r--r-- 1 root root 1841869 2006-09-05 16:35 vmlinuz-2.6.17.11

In diesem Verzeichnis heisst der Kernel vmlinuz-2.6.17.11 und die beiden weiteren wichtigen Dateien sind System.map-2.6.17.11 und config-2.6.17.11. Um diese 3 Dateien als Notfalloption zu erhalten werden die neuen Aequivalente bei gleicher Bezeichnung mit der Endung "-2" erweitert - als Beispiel.

Nun die 3 benötigten Dateien des neu kompilierten Kernel aus dem Kernelverzeichnis nach /boot kopieren und dabei diese Dateien entsprechend umbenennen:

cp /usr/src/linux-2.6.17.11/.config /boot/config-2.6.17.11-2

cp /usr/src/linux-2.6.17.11/System.map /boot/system.map-2.6.17.11-2

cp /usr/src/linux-2.6.17.11/arch/i386/boot /boot/vmlinuz-2.6.17.11-2

Diese 3 Dateien repräsentieren in /boot den neuen Kernel. Die Datei config-2.6.17.11-2 stellt genau genommen eine Sicherheitskopie der Konfigurationsdatei .config des neu kompilierten Kernel dar und kann bei Bedarf von hier nach /usr/src/linux-2.6.17.11 zurückkopiert werden. Die wichtigste Datei ist der neue Kernel vmlinuz-2.6.17.11-2.

3.2. Bootmanager für den neuen Kernel konfigurieren

Um dem Bootmanager Grub die neue Kernelversion als Bootoption verfügbar zu machen wird die Datei /boot/grub/menu.lst modifiziert. Auch hierbei wird die in Pkt.3.1. erwähnte Notfalloption angewendet, in dem die bereits existierenden Versionen um eine weitere Version ergänzt wird!

Beispiel einer auf den neuen Kernel angepassten Datei /boot/grub/menu.lst, hier kein Shellcode:

# /boot/grub/menu.lst

default=0
color yellow/blue red/black
timeout=5

title ZenWalk 3.0 - 2.6.17.11-2
kernel (hd0,1)/boot/vmlinuz-2.6.17.11-2 root=/dev/hda2 quiet resume2=swap:/dev/hda1 vga=794 splash=silent
initrd (hd0,1)/boot/initrd.splash

title ZenWalk 3.0 - 2.6.17.11
kernel (hd0,1)/boot/vmlinuz-2.6.17.11 root=/dev/hda2 quiet resume2=swap:/dev/hda1 vga=794 splash=silent
initrd (hd0,1)/boot/initrd.splash

Der title-Eintrag mit dem neuen Kernel wird in der Reihenfolge obenan gestellt. Dadurch wird ZenWalk durch die Option default=0 bei ausbleibender Aktion automatisch nach timeout=5 (Sekunden) mit diesem Kernel gestartet. Alles klar?

Wird ein Editor wie z. Bsp. der Shell-Editor nano [3] verwendet, kann die Bearbeitung der Datei mit

nano /boot/grub/menu.lst

starten. Das Speichern der Änderungen mit CONTROL O (2 Tasten) nicht vergessen.

4. ZenWalk mit neuem Kernel starten

Weitere Dinge sind nicht erforderlich, alles Notwendige ist erledigt.

Beim nächsten Start von ZenWalk stehen nun 2 zu startende ZenWalk-Versionen zur Wahl, mit neuem Kernel und mit altem Kernel. Wenn ZenWalk mit dem neuen Kernel ohne Probleme startet kann man die menu.lst dahingehend ändern, daß die für den Notfall stehengebliebene alte Kernelversion entfernt wird. Zu diesem Zweck wird sie auskommentiert. Nicht löschen - allerletzter Rettungsanker für den eventuell doch noch eintretenden Notfall des mit dem neuen Kernel nicht bootenden System.

Nur der neue Kernel steht beim Booten zur Auswahl:

# /boot/grub/menu.lst

default=0
color yellow/blue red/black
timeout=5

title ZenWalk 3.0 - 2.6.17.11-2
kernel (hd0,1)/boot/vmlinuz-2.6.17.11-2 root=/dev/hda2 quiet resume2=swap:/dev/hda1 vga=794 splash=silent
initrd (hd0,1)/boot/initrd.splash

#title ZenWalk 3.0 - 2.6.17.11
#kernel (hd0,1)/boot/vmlinuz-2.6.17.11 root=/dev/hda2 quiet #resume2=swap:/dev/hda1 vga=794 splash=silent
#initrd (hd0,1)/boot/initrd.splash

Links

The Linux Installation HOWTO

Ergänzende Artikel zum Beitrag auf dieser Website:

ZenWalk - Suspend2disk [1]
ZenWalk - Grub vs. Lilo [2]
ZenWalk - den Editor nano installieren [3]

Photos by quiptime on Flickr

Powered by Drupal. Created with ZenWalk.