Swiss Penguin Logo

LIB - Linux Kernel kompilieren

LUGS

Über die LUGS
Statuten und Protokolle
Sektionen
Terminliste
IRC
Mailinglisten
Kontaktadressen
Mitglied werden
Internes
Mitgliederliste

LINUX

Was ist Linux?
   Screenshots
Distributionen
   kmLinux
Firmen
Ressourcen
LIB

Dokumentation
Events
Projekte
Vorträge
Allgemeines

ChangeLog
Sprache
Galerie

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:
VorteilNachteil
  • 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 SourcecodePatches
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.
  • Nur Versionserhöhung.

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/bzImagevmlinux
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.

DateiDiskettelilo
makezImagezdiskzlilo
makebzImagebzdiskbzlilo

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]

Powered by Linux, served by Apache / PHP, last changes done 04.02.2008 -- Copyright