Kernel kompilieren
Früher oder später trifft es jeden mal, und viele fürchten sich (grundlos) davor selbst einen Kernel zu übersetzen.
Aber eigentlich ist es gar nicht so schwer, man braucht nur ein paar Dinge:
- einen Compiler, für die meisten wird das der gcc sein
- die Kernelquellen (dazu kommen wir gleich)
- etwas Wissen über seine Hardware (wie man da dran kommt, wird weiter unten beschrieben)
- einen freien Nachmittag ;)
1. Den Quellcode des Kernels besorgen
Erst einmal sollte man sich entscheiden, ob man einen von seiner Distribution angepassten, oder einen sog. Vanilla (also einen “offiziellen”, unmodifizierten) Kernel will.
Normalerweise will man letzteres und da dieses Tutorial möglichst distributionsunabhängig sein soll, werde ich auch davon ausgehen. (allerdings unterscheidet sich das Vorgehen im anderen Fall kaum von diesem)
Die nächste Entscheidung liegt darin, dass man zwischen den zwei (momentan aktiv entwickelten) “Hauptkernelversionen” 2.4 und 2.6 wählen muss. Für den Heimgebrauch sollte man auf einen 2.6er Kernel setzen, da dieser aktuelle Hardware besser unterstützt.
Von den Kernelentwicklern selbst wird allerdings von einer Verwendung eines 2.6er Kernels auf Produktivsystemen abgeraten. Allerdings halte ich diese Bedenken größtenteils für überflüssig.
Auf die Besonderheiten beim Übersetzen eines Kernels aus der 2.4er Sparte werde ich dann hinweisen.
Nun brauchen wir aber erst einmal die Kernelsourcen. Auf www.kernel.org finden sich die Aktuellen (momentan wäre das 2.6.11.11).
Der Link zum Tarball ist unter dem “F” (für “full source”) versteckt. Nachdem man diesen heruntergeladen hat (so etwa 30 Mb), kann man ihn entpacken:
tar -xvjf dateiname
Normalerweise gehört das in
/usr/src/linux/
aber es geht auch problemlos irgendwo im Homeverzeichnis.
Falls man irgendwelche Kernelpatches anwenden möchte (das ist oft der Grund für das ganze Unternehmen), möge man das nach dem “Readme” oder dem “Install”-File des Patches entsprechend tun. Sollte dieses nicht vorhanden sein, so darf man den entsprechenden Maintainer zur Strafe in Sendmail-Sourcen von anno 98 tunken.
2. Informationen über die Hardware herausfinden
Wer die Id seines Prozessors auswendig rückwärts aufsagen kann, darf diesen Abschnitt überspringen.
Um einen Kernel dazu zu bewegen auf einem System ordnungsgemäß zu laufen, muss man bei der Konfiguration angeben, was er können soll. Man könnte natürlich einfach alle Optionen aktivieren, aber dadurch wird der Kernel groß und fett, das will man, wenn man einen Kernel nur für sich baut, normalerweise nicht.
Um herauszufinden, was genau im Rechner drin steckt, kann man beispielsweise auf folgende Informationsquellen zurückgreifen (es gibt sicher noch andere, wer noch was hilfreiches kennt, melde sich bitte im Forum):
- lspci (um alles zu finden, was so am PCI-Bus hängt, das dürfte heutzutage der Großteil der Steckkarten sein)
- /proc/cpuinfo (alles, was man über seinen Prozessor gar nicht wissen wollte)
- Dinge wie Schraubenzieher etc. um Notfalls im Rechner nachschauen zu können
3. Den Kernel konfigurieren
Das wird eigentlich als der schwierigste Schritt angesehen, aber mit Hilfe der “Help”-Funktion und den oben gesammelten Informationen sollte es nicht so schwer fallen.
Es gibt mehrere Möglichkeiten den Kernel zu konfigurieren (damit meine ich mehrere Oberflächen).
- oldconfig, unschön, fragt jede einzelne Option hintereinander ab, braucht aber keine besonderen Libraries
- menuconfig, eigentlich die beste Lösung, man bekommt ein schönes Menü auf curses-Basis (diese Library wird dann aber auch benötigt)
- xconfig(qt) und gconfig(gtk), man bekommt ein grafisches Menü, dafür braucht man aber den entsprechenden Rattenschwanz an Abhängigkeiten
Wenn man sich also entschieden hat begibt man sich mit
make [hier bitte die entsprechende config-variante ohne die Klammern einsetzen]
in das Konfigurationsmenü.
Es gibt (fast) immer 3 Möglichkeiten mit einer Option umzugehen:
- gar nicht reinbauen
- fest reinbauen
- als nachladbares Modul bauen
Es würde den Rahmen dieses Tutorials sprengen die rund 2000 Einzeloptionen Schritt für Schritt durchzugehen, daher nur ein paar wichtige Hinweise:
- “Generic PCI IDE Chipset Support” vergisst sich leicht, aber ohne das fest im Kernel wird Linux auf den meisten Desktopsystemen das Booten mit einer Kernel Panic abbrechen.
- Das Dateisystem, das man nutzt sollte auch fest im Kernel eingebaut sein.
- Wenn man sich nicht sicher ist: Entweder die Standardeinstellung belassen oder in der entsprechenden Beschreibung zu dem Eintrag nachsehen.
4. Den Kernel kompilieren
Dieser Vorgang an sich ist eigentlich harmlos.
Bei einem 2.6er Kernel reicht ein schlichtes:
make all
Bei einem Kernel aus der 2.4er Schiene ist es etwas mehr:
make depend modules bzImage
Nun sollte man sich je nach Geschwindigkeit des Rechners wahlweise mit einem Buch über Shellscripting zurückziehen oder eine Runde Windowsbashing in den Heise-Foren betreiben.
Wenn alles gut geht hat man nun einen frisch gebackenen Linuxkernel auf seiner Platte.
5. Den Kernel installieren
Erstmal vorweg:
make install
ist *böse*, das will man nicht nutzen, weil es einem zu viel rumpfuscht.
Der erste Schritt besteht darin, das Kernelimage an einen geeigneten Ort zu verlegen, dazu sollte man root sein.
Normalerweise liegt es in
arch/i386/boot/bzImage
unter dem Verzeichnis in das man die Kernelsorucen entpackt hat. Ablegen sollte man es mit einem sinnvollen Namen (sowas wie bzImage-kernelversion) in /boot. Dann sollte man noch die Kernelmodule installieren (wenn man überhaupt welche gebaut hat) indem man folgendes (wieder im Verzeichniss mit den Kernelquellen!) ausführt:
make modules_install
Schließlich muß man noch seinen Bootloader entsprechend konfigurieren. Zu Grub findet sich hier ein kleiner Artikel, zu Lilo (noch) nicht. Allerdings finden sich in den unendlichen Weiten des Internets genug Informationen dazu…
Es ist zu beachten, dass man den alten Kernel weiterhin zugänglich lässt, um im Notfall trotzdem noch in sein System kommen zu können.
6. Ausprobieren
Wenn man nochmal alles überprüft hat, kann man endlich den neuen Kernel ausprobieren. Wenn alles bootet und nacher auch funktioniert:
Gratulation, du hast die Feuertaufe mit Bravur bestanden :)
Anderenfalls ist es auch nicht schlimm. Wenn man sich an obigen Hinweis gehalten hat, kann man nachdem man das LED-Blink-Konzert einer Kernelpanic genossen hat in das alte System rebooten und es nochmal versuchen.
Wem haarsträubende Fehler auffallen möge bitte im entsprechenden Forum einen Hinweis hinterlassen.
Verfasser des Artikels: florolf


Kommentare