Kernel kompilieren ist für alte Linux-Hasen ganz normal. Um auch die letzten Ressourcen
aus seinem System zu hohlen, wird ständig der neueste Kernel installiert.
Für Anfänger ist es zumeist ein Schock, daß man das eigenen Betriebssystem aus
dem Quellcode heraus erzeugen soll. Denn wer mußte jemals schon mal sein Windows kompilieren?
make menuconfig eingeben.
Alles weitere ist selbsterklärend.
Anmerkung: Falls irgendwo X11 läuft, ist auch
make xconfig möglich -- dann kann man sich den
Kernel zusammenklicken. Gegebenenfalls muß man vorher
noch mit xhost +localhost
dem root-Benutzer erlauben, auf deine X-Session zuzugreifen,
falls Du nicht als root X gestartet hast (und das ist unbedingt
zu vermeiden, es öffnet nämlich einige Sicherheitslücken).
Stattdessen kann man auch einfach die `.Xauthority'
des Users, der X gestartet hat (d.h. dem die X Sitzung "gehört") in das
Verzeichnis des Users kopieren, der darauf zugreifen kann -- hier
root.
Das erste Mal könnte es etwas länger dauern, bis man etwas auf dem Bildschirm sieht -- das Konfigurationsprogramm für den Kernel wird nämlich auch als Quellcode geliefert und muß zuerst kompiliert werden.
Grundregel für den Kernel: Alles, was nicht unbedingt zum Booten benötigt wird, gehört nicht in den Kernel, sondern wird als Modul kompiliert. Eine Ausnahme sollte nur dann gemacht werden, wenn man irgendwas "dediziertes" (wie einen stand-alone Firewall, einen Router, o.ä.) bauen will, auf dem keine Anwendersoftware und kaum Hardware läuft.
Aber es gibt für alles Ausnahmen. Wenn etwas als Modul nicht funktioniert, kann es durchaus sein, daß der Programmierer geschlampt hat und es fest einkompiliert problemlos geht oder umgekehrt.
Bitte lesen Sie auf jeden Fall die Hilfe zu jedem Punkt,
den man an- oder abwählt!
Der Kernel kommt normalerweise mit einer vernünftigen
Standard-Vorkonfiguration, die man zwar auf seine Bedürfnisse
anpassen kann, aber mit dem Gedanken
"Das hört sich cool an, das probier ich"
fängt man sich sehr schnell Probleme ein. Außerdem gilt wie immer,
Dokumentation lesen lohnt sich u.U. sehr, wenn man etwas für
trockenen Humor übrig hat ...
MTRR
Als Modul sollten kompiliert werden (falls benötigt):
Der Grund dafür ist einfach. Diese Technik spart Speicherplatz (die Module werden erst geladen, wenn sie auch wirklich gebraucht werden, und das automatisch. Nach einer einstellbaren Zeit werden die Module dann wieder rausgeworfen) und ist flexibler (man kann ihnen auch zu laufzeiten z.B. I/O Adressen und IRQs zuweisen, als wenn sie fest im Kernel sitzen. Dann müßte man bei IRQ-Änderungen den ganzen Kernel neu booten).
Man sollte grundsätzlich
`Network support' auf "YES"
stellen und mindestens ein `dummy' network device mit
einbinden, denn viele Programme benutzen auch das Netzwerk, wenn keine
Netzwerkkarte eigebaut ist (Linux ist halt ein Netzwerk-Betriebssystem),
oder wenigstens die Protokolle, zur Prozeßkommunikation!
X-Window ist ein wichtiger Kandidat aus dieser Kategorie,
der Druckerspooler (lpd) ebenfalls. Hat
man ein echtes Netzwerk, braucht man kein `dummy' Device mehr;
stören tut es aber nicht.
Ist man fertig mit Einstellen, geht man raus (`Exit'), speichert ab
(`Yes') und tippt einmal make dep clean modules zImage
modules_install (die Reihenfolge nach dep clean
ist eigentlich
egal), und arbeitet je nach Rechner zehn Minuten (P166, 32MB) bis zehn
Stunden (386DX-33, 8MB) auf einer anderen Konsole kann man parallel getrost
weiterarbeiten.
Ist der Kompilierungsvorgang abgeschlossen, findet man unter /usr/src/linux/arch/i386/boot/ eine Datei namens zImage, die den neuen Kernel darstellt. Man kopiere diese ins `root' Directory (oder nach /boot, hauptsache irgendwo auf die root-Partition) und füge in die `/etc/lilo.conf' (vorausgesetzt, man benutzt LILO zum booten) folgendes ein:
image = /boot/zImage # zum Beispiel
label = NeuerKernel # max. 15 Buchstaben
Das setzt voraus, daß eine lauffähige `lilo.conf' schon existiert und alle anderen Settings die gleichen bleiben (`root, boot, prompt', etc).
Danach ein kurzes
/sbin/lilo
aufrufen, und lilo sollte den neuen Kernel als weitere Bootoption aufnehmen.
Dann kann man beim nächsten
Neustart beim `LILO:' Prompt NeuerKernel
eingeben und dann wird der neue Kernel auch schon gebootet.
Soll das der Standard bleiben, d.h. läuft der
"Neue" ein paar Tage problemlos, kann man in der `/etc/lilo.conf' die
beiden Zeilen einfach vor die stellen, die den Standardkernel
enthalten. einmal LILO aufrufen, und fertig.
Booten via `LOADLIN' ist auch nicht schwer. Irgendwo dürfte der Kernel liegen, den man früher gebootet hat. (Meistens auf einer DOS-Partition.) Dann einfach den neuen Kernel z.B. als `neuer.img' ins gleiche Verzeichnis kopieren und beim nächsten Booten die neue Kerneldatei dem `LOADLIN' als Parameter übergeben (oder nach Belieben in die Batchdatei schreiben).
Links
Homepage des Autors (Jens Benecke): http://www.pinguin.conetix.de
Linux USER FAQ (Deutsche Version): http://www.pinguin.conetix.de/linux-faq/index.html