Wieso soll ich einen neuen Kernel kompilieren?
Einige haben gerade erst erfolgreich ihr Linux installiert und werden sich
wohl berechtigt fragen: "Wieso soll ich einen neuen Kernel kompilieren?".
Dies lässt sich am ehesten mit Anzügen vergleichen:
Standart-Kernel | => | Anzug von der Stange |
Eigener Kernel | => | Massanzug |
Und das sind die Vor- und Nachteile:
Vorteil | Nachteil |
- Der Kernel ist optimiert auf den verwendeten Microprozesser. Wer
will seinem Pentium II schon ein Betriebsystem anbieten, dass
für einen 386er kompiliert ist.
- Kernelfunktionen können bei Nichtgebrauch weggelassen
werden. So verbraucht er weniger Speicher und ist stabiler, denn
mit jeder Codezeile weniger verringert sich auch die Chance, dass
sich Fehler darin befinden.
|
- Bei Hardware-Änderung oder Erweiterung muss der Kernel neu
kompiliert werden.
- Einmalige umfangreiche Konfigurationsarbeit.
|
Den Source-Code installieren/patchen.
Es gibt zwei Möglichkeiten den Kernel auf einen höheren Version zu
transferieren. Die entsprechenden Dateien findet man unter
http://www.kernel.org/pub/linux/kernel/
oder in der Schweiz unter
sunsite.cnlab-switch.ch
(Mirror).
| Kompletter Sourcecode | Patches |
Dateiname
|
linux-{Hauptversion}.{Subversion}.{Patchnummer}.tar.gz
|
patch-{Patchnummer}.gz
|
Verzeicnis
|
/usr/src
|
/usr/src
|
Befehl
|
tar -zxvf
|
./linux/scripts/patch-kernel
|
Vorteil
|
- Jede gewüschte Kernelversion
|
- Kleine Dateien.
- Konfiguration bleibt bestehen.
|
Nachteil
|
- Sehr gross.
- Konfiguration (.config) muss wegkopiert werden, sonst wird sie überschrieben.
|
|
Module oder nicht Module.
In den Anfängen von Linux waren alle Treiber und Funktionen statisch im
Kernel integriert. Aber im Laufe der Zeit wurde die Funktionen immer
umfangreicher und der Kernel wuchs und wuchs. Es existiert allerdings im
PC-Bereich eine pysikalische Grenze, welche bei 640 KByte liegt. Das Prinzip
der modularen Funktionen und Treiber schaffte hier Abhilfe.
Folgende Implementationen sind möglich:
Fix im Kernel |
Alles was für das Starten des Systems nötig ist.
- SCSI / IDE
- Harddisk
- Primäres Filesystem
- Support für das primäre Format der auszuführenden Programme (elf)
- Netzwerkkarten
- Konsolen/Framebuffer
- PS2-Mäuse und Serieller Port
|
Dynamisches Module |
Alles was sporadisch gebraucht wird:
- CDROM
- Tape
- Sound
- Zusätzliche Filesysteme
- Support der zusätzlichen Formate der auszuführenden Programme (a.out, java, etc.)
- TV-Karten
- Floppy
- PPP/SLIP/PLIP
- ISDN
|
Die Konfiguration.
Einer der Befehle im Verzeichnis /usr/src/linux ausführen.
make config |
Etwas für absolute Puristen oder für den Fall, dass nur eine
serielle Leitung und eine reine Textemulation zur Verfügung steht.
Die Konfiguration wird durch sequenzielle Fragen realisiert.
|
make menuconfig |
Eine komfortable, menügefürte Konfiguration. Dies bedingt
allerdings eine ANSI-Terminalemulation.
|
make xconfig |
Entspricht dem "make menuconfig", jedoch für X-Windows.
|
Vorbereitungen
Nachdem die Konfiguration beendet ist, sehen sie die Anweisung "make dep ;
make clean" auszuführen. Hier eine kleine Beschreibung, was diese Befehle
bewirken.
make dep |
Es wird errechnet, welche Dateine kompiliert werden müssen anhand
der Konfiguration und der Abhängigkeiten der einzelen Module.
|
make clean |
Alle Dateien, die von einem ehemaligen Kompilieren existieren
(Object-Dateien, Kernel, Module, etc.), werden gelöscht, damit
keine alten Versionen in den neuen Kernel kommen.
|
Backe, backe Kernel.
So nun kommt die Stunde der Warheit. Je nach Kernelgrösse und Architektur
muss eines von verschiedenen Verfahren verwendet werden:
zImage/ | bzImage | vmlinux |
Für kleine Kernel die (gepackt) in Maximal 512 KB Ram platz haben.
Gewisse Boards (v.a. 386/486er und ältere Pentiums) müssen
diese art Kernelkompression benützen.
|
Big zImage, dabei kann der Kernel fast beliebig gross werden. Dies
benutzen falls bei "make zImage" die Warnung "Kernel too big" kommt.
|
Roher, ungepackter Kernel. Geht nicht auf PC-Architektur. Benutzer
einer Alpha (Alpha-Prozessor) kompilieren ihren Kernel so.
|
| Datei | Diskette | lilo |
make | zImage | zdisk | zlilo |
make | bzImage | bzdisk | bzlilo |
Die Module nicht vergessen.
Module konfiguriert? Dann bloss nicht die zwei folgenden Befehle vergessen.
Bitte genau in dieser Reihenfolge ausführen.
make modules |
Alle konfigurierten Module werden kompiliert.
|
make modules_install |
Die Module werden installiert.
|
Über dieses Dokument und den Author.
Gesetzt den Falles, diese Dokument enthält Fehler, übernehme ich
logischerweise keine Haftung, aber ich wäre sehr froh wenn ich die
Korrektur über Mail
erhalten kann. Natürlich bin ich auch über jede Idee zur
Erweiterung dankbar.
Norbert Kümin
[korrigiert von Peter Keel]
|