Login
Newsletter
Werbung

Mo, 22. November 1999, 00:00

Kernel-Kompilierung

Kernel backen leicht gemacht...

Vorwort

Eine der grundlegendsten Sachen, die man in Linux eigentlich können sollte, vor dem aber die meisten zurückschrecken, ist eine Kernelübersetzung. Dabei geht es nicht so sehr darum, als Hacker ein neues System zu kreieren, sondern schlicht und einfach darum, sich das grundlegende Element des Systems an seine eigene Hardware anzupassen. Dass viele Leute davor Bammel haben, einen Kernel "zu bauen" aber andererseits bedenkenlos einen Softwarepatch in WindowsXX einbauen, der noch viel undurchsichtigere Dinge anstellen kann, ist umso unverständlicher, da die Wirkung eines Kernels sehr genau abzuschätzen und noch leichter rückgängig zu machen ist. Vielleicht liegt es an der Aura des Computergurus, die einen empfängt, wenn man eine - im Sourcecode vorliegende - Software mit einem Compiler (1. Angstwort) übersetzen und eventuell sogar debuggen (2. Angstwort) muss, um es schliesslich von Hand (3. Angstwort) zu installieren.

Dabei ist der Kernel eines Linux-Systems ganz sicher ausgereifter und erprobter als die Version 1.0 von Windows98 (dabei weiss ja jeder, dass man ein Product von MS erst ab der Version 3.1 kaufen darf), aber fast jeder traut sich zu, diese zu installieren. Nun, ich werde versuchen, eine leichtverständliche Anleitung zu geben, wie man ohne Horror einen Kernel kompiliert, installiert und dabei bei Verstand bleibt.

Syntax: bzip2 [Optionen] Datei -> komprimiert
bunzip2 [Optionen] Datei.gz -> dekomprimiert

bzip2 und bunzip2 haben die gleiche Funktion wie gzip und gunzip. Allerdings erzeugt bzip2 deutlich kleinere Dateien, was jedoch auch ein wenig länger dauert. Die Endung von bzip2-komprimierten Dateien lautet .bz2.

Vorarbeit

Als erstes muss man feststellen, welcher Kernel schon da ist. Der Default-Ort für die Kernelquellen ist /usr/src/linux und dort schaut man am besten nach ;) Nun ist es manchmal nützlich, mehr als einen Kernel zur Verfügung zu haben, deshalb wird dieser meist nicht direkt unter /usr/src/linux gespeichert, sondern unter /usr/src/linux-2.x.x wobei die letzten beiden x die Versionsnummer darstellen. Da aber einige Programme nach einem Zweig /usr/src/linux suchen und ihn auch wirklich brauchen, muss man einen Link auf die Version, die einem am stabilsten erscheint, erzeugen (mit ln -s linux-2.2.0 linux z.B.). Deshalb sieht es manchmal (z.B. bei mir) so aus:

thunder:/usr/src #ls -l
total 7
lrwxrwxrwx 1 root root 17 Feb 4 15:38 linux -> linux-2.0.35.SuSE
drwxr-xr-x 15 root root 1024 Feb 4 14:07 linux-2.0.35.SuSE
drwxr-xr-x 15 root root 1024 Dec 18 14:10 linux-2.0.36
drwxr-xr-x 14 root root 1024 Dec 22 20:02 linux-2.1.132
drwxr-xr-x 14 root root 1024 Jan 26 02:21 linux-2.2.0
drwxr-xr-x 4 root root 1024 Jan 28 21:50 linux-2.2.1
drwxr-xr-x 3 root root 1024 Jun 9 1998 motif
drwxr-xr-x 7 root root 1024 Jun 7 1998 packages

Wenn man also die Kernelquellen von irgendwoher (CDROM, ftp.funet.fi:/pub/Linux/PEOPLE/Linus) bekommen hat, kopiert man sie meist in gepackter Form als linux-2.x.x.tar.gz (oder .rpm) in das Directory. Dann löscht man den alten Link (denn das Archiv wird in das Directory linux entpackt und würde dann das alte überschreiben). Nun entpackt man die Kernelquellen mit tar zxf linux-2.x.x.tar.gz, benennt diese mit mv linux linux-2.x.x um und kreiert einen Link mit ln -s linux-2.x.x linux (immer zuerst der Ort/Name, den man als Ziel haben will, dann den Namen des Links).

Konfigurieren

Da die Default-Konfiguration des neuen Kernels nicht mit unserem System übereinstimmt, muss man das Ganze noch konfigurieren. Also wechseln wir nach /usr/src/linux (falls wir nicht schon da sind), und rufen das Konfigurationsprogramm auf.

Hier gibt es drei Möglichkeiten:

  • Wir haben den X-Server schon laufen, sind in einer X-Session und haben etwas Platz auf dem Schirm. Dann geben wir make xconfig ein.
  • Wir haben keinen X-Server laufen, mögen es aber bunt, dann geben wir make menuconfig ein.
  • Wir haben keine Lust auf bunt und sind sowieso Oberflächen abgeneigt. Dann geben wir das Original make config ein. Die Konfiguration bespreche ich hier in ihren Einzelheiten. Der ungeduldige Leser kann sich später darum kümmern.

Compilieren

Nachdem man die Konfiguration abgeschlossen hat, geht's zur Sache.

  • Zuerst werden dem Code die Abhängigkeiten einzelner Bibliotheken und include-Files angegeben: make depend
  • Dann übersetzt man die Module und installiert sie: make modules modules_install
  • Zuletzt kommt der eigentliche Kernel dran mit make zImage

Diejenigen, die nicht von Befehl zu Befehl vorm Computer sitzend warten wollen, geben alles in einer Zeile an:

make depend && make modules && make modules_install && make zImage

Hierbei bedeutet das &&, dass der nächste Befehl solange warten soll, bis der vorhergehende erfolgreich abgeschlossen ist.

Und die ganz Schreibfaulen geben nur make depend modules modules_install zImage ein.

Wie auch immer, auf jeden Fall fängt nun der Computer an zu rattern, dass man meint er fällt auseinander oder will gleich abheben. Heutzutage dauert das meist ca. 2-10 Minuten. In den »Guten Alten Tagen« dauerte es einiges länger:

80386 ca. 18-26h
80486DX66 ca. 1 h
80486DX100 ca. 30 min
Pentium133 ca. 15 min
AMD K6-2 300 ca. 4 min
Dual Pentium II 400 ca. 2 min
DEC ALPHA 21264-500 ca. 1 min (mit RAID5)

Alle Werte natürlich je nach Speichermenge und Festplatte variabel. Einige Zeitschriften benutzen inzwischen die Kernelcompilierung als Benchmark.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung