Jesters Homepage

Tipp 9 - Kernel-Backrezept


Nun wird es höchste Zeit, einmal das "Kernel-Backen" genauer zu erklären. Schwierig ist es nämlich nicht, man muss nur wissen, welche Schritte durchzuführen sind. Ein gewisses Know-how über die eigene Hardware und eine Vorstellung, was man mit seinem Rechner so anfangen will, sollte man auch haben.

Zunächst besorge man sich den aktuellen Kernel, zum Beispiel von LinuxHQ

Im weiteren Verlauf nehme man sich Ruhe, sammle sich in Konzentration und gebe eine Checkliste dabei, wie zum Beispiel die nun folgende.

Schritt 1
Im Allgemeinen befinden sich die Kernelsourcen im Verzeichnis  /usr/src/linux - wobei linux in der Regel ein Link auf ein Verzeichnis ist, das Auskunft über die verwendete Kernelversion geben sollte, z.B.  /linux-2.0.36.
Ist das der Fall, sollte man als nächstes den Link linux löschen. Das geht mit  rm linux . Dieser Schritt ist deshalb notwendig, weil die Kernelquellen meist nach linux entpacken - und so würden die alten Quellen überschrieben. Solange aber nicht sicher ist, dass der neue Kernel auch mit dem bestehenden System läuft, sollte man immer auf Nummer Sicher gehen.

Schritt 2
Nun kopiere man die Datei, die man sich zuvor heruntergeladen hat, nach  /usr/src und entpacke sie dort. Wie das geht, steht in Linuxtipp 8.

Schritt 3
Nun benenne man das neu entstandene Verzeichnis /linux um in z.B. /linux-2.2.3. Das geht ganz einfach mit mv linux linux-2.2.3. Dann erstelle man einen Softlink namens /linux auf das neu benannte Verzeichnis /linux-2.2.3. Die Erklärung findet sich in Linuxtipp 6.

Schritt 4
Die eigentliche Konfigurationsarbeit beginnt nun. Man lege alle verfügbaren Handbücher (Drucker, Monitor, Motherboard usw.) bereit und vergewissere sich, daß man sich als root oder im Superuser-Modus im Verzeichnis /usr/src/linux befindet.
Dann hat man drei Möglichkeiten, die Kernelkonfiguration vorzunehmen: Auf der Kommandozeile, im Menü im Textmodus oder im Menü unter X Window. Ich bevorzuge die letzten beiden Methoden, weil man problemlos nochmal nachschauen kann, ob man etwas vergessen hat, oder welche Einstellungen man vorgenommen hat.

Der Aufruf ist jeweils ähnlich:

im Textmodus auf Consolen-Ebene: make menuconfig

unter einem beliebigen X Window Manager: make xconfig

Schritt 5
Wegen der wirklich unterschiedlichsten Systeme und Anforderungen kann meine Beschreibung der eigentlichen Konfiguration des neuen Kernels nur sehr global bleiben. Mein Tipp hierbei ist der folgende: Ganz systematisch alle Einstellungen durchgehen und im Zweifel den Hilfetext aufrufen und sehr genau durchlesen. Da steht dann im Allgemeinen auch eine Empfehlung, was man einstellen soll, wenn man sich nicht sicher ist. Damit's beim nächsten Kernel-Release schneller geht, sollte man sich die Mühe machen, jede Konfigurationseinstellung zu dokumentieren. Dann kann man später auf bewährte Konfigurationen zügig zurückgreifen. Außerdem erleichtert es die Fehlersuche, falls etwas nicht wie gewüscht funktioniert.

Sind alle Konfigurationseinstellungen vorgenommen das Abspeichern nicht vergessen und das Programm wieder verlassen. Nun wird es spannend.

Schritt 6
Der Reihe nach sind nun folgende Befehle aufzurufen (man kann die auch "pipen", für den Anfang schlage ich aber vor, das nicht zu tun.

make dep

make clean

make zImage

Dann sollte der neue Kernel fertig sein. Bei mir gab's unter 2.2.x ein Problem, dass der Kernel durch zu viele Features zu groß geworden war. Abhilfe schaffte der Aufruf:

make bzImage - ein BIG Kernel.

Schritt 7
Hat man Module konfiguriert, so müssen diese nun auch noch erstellt werden:

make modules

und

make modules_install

Schritt 8
Jetzt muß der neue Kernel natülich noch an die "richtigen" Stellen kopiert und ein wenig Feinschliff vorgenommen werden, damit er auch gebootet wird (und nicht weiterhin der alte Kernel Verwendung findet):

Bei mir steht die Datei vmlinuz (der aktuell verwendete Kernel) im Verzeichnis /boot . Die Datei kann aber auch im Wurzelverzeichnis stehen. Oder an einer noch anderen Stelle, je nach verwendeter Distribution. Insofern muß das nun gesagte an das jeweilige System angepasst werden!

Als erstes sichere man den aktuell noch laufenden Kernel, um im Notfall auf ihn zurückgreifen zu können. Dazu benennt man ihn um:

mv vmlinuz vmlinuz.old

Dasselbe für die System.map-Datei:

mv System.map System.map.old

Dann kopiert man den neu erstellten Kernel ins Verzeichnis /boot:

cp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz

Und wieder dasselbe für die System.map:

cp /usr/src/linux/System.map /boot/System.map


Schritt 9
Dieser Schritt ist abhängig davon, wie Linux auf dem jeweiligen System gebootet wird. Weil ich mir immer zwei Wege offen halte, werde ich die auch beschreiben. Wahlweise boote ich Linux mittels Loadlin von Windows aus, oder aber bei einem Kaltstart mittels LILO von Diskette. Dies erspart mir, im MBR meiner primären Festplatte rumfummeln zu müssen und ermöglicht mir jeweils einen schnellen und unkomplizierten Start.

Loadlin
Um von Windows aus den neuen Kernel zu booten, führe ich folgende Schritte aus:

Zunächst benenne ich den noch aktuell laufenden Kernel um. Da ich die Festplatte c: (genauer, die Partition, auf der sich c: befindet) unter /win95 in den Linux-Dateibaum eingebunden habe, geht das ganz problemlos auch dort:

mv /win95/loadlin/vmlinuz /win95/loadlin/vmlinuz-2.2.1

Dann kopiere ich den neu erstellten Kernel in das Loadlin-Verzeichnis:

cp /boot/vmlinuz /win95/loadlin/vmlinuz

Durch einfaches Umbenennen kann ich, falls mit dem neuen Kernel etwas schiefgeht, wieder den alten Kernel booten.

LILO
LILO läßt sich sehr angenehm auch von Diskette nutzen. Dabei kann wahlweise der auf der primären Linux-Partition befindliche Kernel oder aber ein Kernel direkt von der Diskette gebootet werden. Wichtig ist einzig und allein, dass der neu erstellte Kernel auch gefunden wird. Wie man LILO Bootdisketten erstellt, beschreibe ich in Linuxtipp 10.