Den Kernel compilieren


Wegweiser

Wer sich mit dem Erstellen eines neuen Kernels auskennt, kann diesen Abschnitt überspringen. Wichtig ist die Auswahl der richtigen Optionen beim Compilieren. Wer noch nicht weiß, wie es geht, sollte hier weiterlesen.


Normalerweise befindet sich der Quelltext des Kernels in dem Verzeichnis

/usr/src/linux. 
Nachdem die Kernel-Quelltexte erfolgreich entpackt wurden, ruft man jetzt das Konfigurationsskript auf:
cd /usr/src/linux
make menuconfig
(ein menübasiertes Skript im Textmodus)
oder
make xconfig
(Skript für die X-Window-Oberfläche, läuft jedoch nicht auf allen Systemen, benötigt ein installiertes Tcl/Tk in einer aktuellen Version)
Etwas archaisch, aber bewährt und stabil:
make config
Im folgenden soll die Vorgehensweise bei 'make menuconfig' beschrieben werden. Selbstverständlich lassen sich die beiden anderen Möglichkeiten auch nutzen, die Einstellungen sind entsprechend anzupassen. In jedem Fall werden viele Fragen gestellt, die man mit 'y' (yes), 'n' (no) oder 'm' (Modul) beantworten kann. Einige Eigenschaften lassen sich nämlich auch als Module einrichten, um sie nur bei Bedarf nachladen zu können und somit Speicher zu sparen. Der Einfachheit halber wird hier auf diese Möglichkeit nicht explizit eingegangen, wer Module erstellen will, muß selbst die entsprechenden Veränderungen vornehmen. Weitere Informationen findet man im Module-HOWTO, das zur Zeit leider nicht betreut wird: ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/unmaintained/Module-HOWTO. Compiliert wird mit:
make dep
make clean
make zImage
Der 'make'-Befehl akzeptiert die einzelnen Optionen auf einer Zeile, so daß man auch
make dep clean zImage
eingeben kann. Wurde der Kernel erfolgreich compiliert, kann man ihn dorthin bringen, wo er hin muß:
cat /usr/src/linux/arch/i386/boot/zImage > /vmlinuz
Wer Lilo installiert hat, muß diesen starten:
lilo
Auf diese Weise erkennt Lilo, daß ein neuer Kernel installiert wurde und bootet diesen beim nächsten Neustart. Ein
make zlilo
automatisiert die Schritte zImage, Kernelkopie und LILO-Installation. Da hierbei gleichzeitig die Datei System.map aktualisiert wird, ist dieser Befehl von Vorteil. Wer sich aber nicht sicher ist, ob der neue Kernel auch wirklich startet, sollte dann aber eine Bootdiskette bereithalten. Weitere Informationen zu diesem Thema gibt das Kernel-HOWTO http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html .
Wer seinen Kernel mit einem Patch auf die aktuelle Version bringen will, sollte nach dem Patchen
(cd usr/src/linux; zcat /pfad/zum/patch-x.x.x.gz | patch -p1) 
das Quelltextverzeichnis mit einem
find /usr/src/linux -name *.orig | xargs rm
aufräumen. Ein
find /usr/src/linux -name *.rej -print 
sollte ohne Ausgaben bleiben, sonst ist mit dem Patch etwas schiefgelaufen. Ein Wort zu den Kernel-Modulen

Einsteigern wird zwar nicht empfohlen, die Treiber als Module zu compilieren, es ist jedoch in der Testphase manchmal recht hilfreich. Das korrekte Funktionieren der Module hängt von passenden Einträgen in der Datei System.map ab. Bekommt man beim Laden von Modulen Fehlermeldungen bezüglich "unresolved symbols", so gibt es dafür zwei Ursachen. Das Problem kann sowohl durch eine nicht zum laufenden Kernel passende System.map als auch durch ein nicht aktualisiertes Modul-Verzeichnis hervogerufen werden. Im ersteren Fall hilft das Kopieren der passenden System.map nach /. In letzterem Fall sollte man das Verzeichnis /lib/modules/{aktuelle Kernel-Version} leeren und die Module noch einmal neu erstellen und installieren:

cd /usr/src/linux
make modules modules_install

Dieser Schritt ist selbstverständlich ebenfalls nach der Erstellung eines neuen Kernels fällig. Anschließend aktualisiert man die Abhängigkeiten der einzelnen Module untereinander mit

depmod -a 

Wegweiser

Lesen Sie jetzt, welche Optionen Sie beim Compilieren einstellen müssen, und compilieren Sie danach das Kernel. Weiter.



Hans-Peter Zorn
Last modified: Sun Sep 5 14:32:01 CEST 1999