Kerngeschäft
Kernel-Neubau ohne Expertenwissen
Zielgerade
Nun trennt Sie, wenn alles glatt geht, nur noch ein make (und eine Wartezeit von etwa 5-30 Minuten) von einem fertigen Kernel. Beim Kompilieren erscheinen viele Meldungen auf der Konsole; Warnungen (Abbildung 4) sind dabei kein Grund zur Besorgnis. Für Debian- und Ubuntu-User ergeben sich einige Abweichungen (siehe Kasten).
Läuft die Kompilation durch, ohne dass Sie das Wort error zu sehen bekommen, finden Sie den neuen Kernel innerhalb des Kernel-Quellbaumes im Verzeichnis /arch/Prozessor-Architektur
/boot als Datei bzImage. Bei einem PC ist das /arch/i386/boot, was auch für amd_64-Kernel gilt. Kopieren Sie das bzImage in das Verzeichnis /boot. Benennen Sie die Datei dort in vmlinuz-Kernelversion
um. Kopieren Sie außerdem die Datei system.map nach /boot/system.map-Kernelversion
. make modules_install installiert schließlich die als Modul konfigurierten Teile des Kernels.
Kernel-Kompilieren unter Debian und Ubuntu
Debian- und Ubuntu-Anwender sollten zum Kompilieren des Kernels nicht den Befehl make verwenden, sondern make-kpkg. Voraussetzung hierfür ist das Paket kernel-package. Wenn Sie eine Initial Ramdisk benötigen, fügen Sie dem Aufruf den Parameter --initrd hinzu.
Nun müssen Sie den neuen Kernel noch in das Startmenü des Bootloaders eintragen. Beim Bootloader Grub, den inzwischen fast alle Distributionen nutzen, editieren Sie dazu die Datei /boot/grub/menu.lst. Für Lilo stehen die entsprechenden Einstellungen in /etc/lilo.conf.
In die Gänge kommen
Beim Booten stellt sich leider ein klassisches Henne-Ei-Problem ein: Um Dateisysteme lesen zu können, benötigt der Kernel Module, die in einem Dateisystem auf der Festplatte liegen. Als Lösung setzen die meisten Distributionen eine sogennanten Initial Ramdisk ein. Der Kernel mountet die Initial Ramdisk, deren Inhalt der Bootloader dem Kernel zur Verfügung stellt, vorübergehend als Root-Dateisystem. Der Kernel findet darin die benötigten Module. Alternativ lassen sich die Dateisystem- und Festplattentreiber auch fest in den Kernel einkompilieren.
Normalerweise reicht mkinitrd ohne Parameter als Root aus, um für alle Kernel-Images in /boot neue Initial-Ramdisk-Images zu generieren. Im Details unterscheidet sich mkinitrd von Distribution zu Distribution, so dass ein Blick in die Manpage nicht schaden kann. Wenn alles glatt geht, liegt danach ein neues Initrd-Image initrd-[Kernelversion] im Verzeichnis /boot.
Listing 1 zeigt eine menu.lst, die Einträge für ein Ubuntu- und ein Suse-System enthält. Die root-Zeile legt die Partion fest, in der das Kernel-Image liegt. Die Sytax hd(0,0) steht für: 1. Festplatte, erste Partion, also hda. Die nächsten zwei Zeilen bezeichnen das Kernel-Image und das Initial-Ramdisk-Image. Beim Kernel-Image folgen hinter dem Dateinamen noch die Parameter, die dem Kernel beim Start übergeben werden sollen.
Auch wenn die menu.lst recht kompliziert aussieht, ist es in der Praxis einfach, einen Grub-Menüeintrag für Ihren neuen Kernel zu erstellen: Dupizieren Sie den Standard-Eintrag für Ihre Distribution und passen Sie dann die Dateinamen für Kernel und Initial Ramdisk sowie den title an. Entfernen Sie in dieser Phase keine bestehenden Einträge.
Listing 1
title Ubuntu, kernel 2.6.12-9-386
root (hd0,0)
kernel /boot/vmlinuz-2.6.12-9-386 root=/dev/hdc1 ro quiet splash
initrd /boot/initrd.img-2.6.12-9-386
title SUSE LINUX 10.0
root (hd0,8)
kernel /boot/vmlinuz root=/dev/hdc9 vga=0x31a selinux=0 resume=/dev/hdc3 splash=silent showopts
initrd /boot/initrd
Booten Sie nun Ihr System neu, wählen Sie im Bootprompt den neuen Kernel und achten Sie auf Fehlermeldungen. Auf gewohnte grafische Bootscreens müssen Sie mit dem Plain-Vanilla-Kernel verzichten, diese Funktion fügt erst der Bootsplash-Patch [4] hinzu.



