Konfiguration, Erstellung und Installation eines Kernels

Wichtung: 3

Beschreibung: Die Kandidaten sollen in der Lage sein, einen Kernel und ladbare Kernelmodule aus dem Quellcode anzupassen, zu erzeugen und zu installieren.

Wichtigste Wissensgebiete:
Anpassen der aktuellen Kernel-Konfiguration.
Erzeugen eines neuen Kernels und passender Kernel-Module.
Installieren eines neuen Kernels und beliebiger Module.
Sicherstellen, dass der Boot-Manager auf den neuen Kernel und die zugehörigen Dateien zugreifen kann.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/usr/src/linux/*
/usr/src/linux/.config
/lib/modules/kernel-version/*
/boot/*
make
make Ziele: all, config, menuconfig, xconfig, gconfig oldconfig, modules, install, modules_install, depmod, rpm-pkg, binrpm-pkg, deb-pkg

Kernel kompilieren

Folgende Schritte müssen durchgeführt werden, wenn man einen Kernel zu kompilieren möchte:

- Kernel-Sources in /usr/src/ entpacken (sofern noch nicht geschehen)
- Symlink von /usr/src/linux auf /usr/src/linux-VERSION (sofern noch nicht geschehen)
- Mit make config/menuconfig/xconfig den Kernel konfigurieren
- Kernel übersetzen: make dep/bzImage/modules
- Kernel installieren: make modules_install

Schritt 1: Kernel entpacken

Auf www.kernel.org ist es möglich, sich einen aktuellen Kernel herunterzuladen. Die Kernel-Sources sind komprimiert. Beispiel: linux-2.6.16.31.tar.gz 07-Nov-2006 13:42 49M. Die Kernel-Sources werden nach /usr/src/ entpackt.

/usr/src/ # tar xvzf linux-2.6.16.31.tar.gz

Schritt 2: Symlink setzen

In der Regel setzt man einen Symlink von /usr/src/ auf die entpackten Kernel-Sources. Damit kann man später die problemlos den Kernel upgraden.

/usr/src/ # ln -s linux-2.6.16.31/ linux

Schritt 3: Kernel konfigurieren

Im nächsten Schritt wird der Kernel konfiguriert. Das heißt, dass man festlegt, welche Module (Beispielsweisee Gerätetreiber) in den Kernel kompiliert werden. Dabei hat man die Möglichkeit, die Module fest in den Kernel einzubinden [*] oder als Modul [M] zu kompilieren.

Sämtliche Einstellungen werden hierbei in der Datei /usr/src/linux/.config vorgenommen. Diese Datei beinhaltet die benötigten Infos, welche Kernel-Module wie eingebunden werden sollen.

Damit man diese Datei nicht manuell bearbeiten muss, kann man Hilfsprogramme benutzen. Dazu wechselt man ins /usr/src/linux Verzeichnis startet mit make [ziel] die Hilfsanwendung:

make config = Sehr einfaches Programm zum Konfigurieren des Kernels
make menuconfig = dialog-basiertes textorientiertes Programm für die Kernelkonfiguration
make xconfig = Tcl/tk basiertes graphisches Programm

Alle oben genannten Programme machen nichts anderes als die Datei /usr/src/linux/.config auszulesen und zu bearbeiten

Schritt 4: Kernel übersetzen

Nachdem feststeht, welche Module wie in den Kernel eingebunden werden sollen, kann der Kernel übersetzt werden.

Teil A: Abhängigkeiten prüfen
make dep muss nur beim ersten Mal, wenn man den Kernel übersetzt, angewendet werden. make dep erstellt die Abhängigkeitsinformationen.

Teil B: Kernel übersetzen
Als nächstes muss der Kernel übersetzt werden. Dazu gibt es mehrere Möglichkeiten:

make zImage = Alte Methode. Erstellt Kernel in /usr/src/linux/arch/ARCHITEKTUR/boot/zImage.
make zdisk = Compiliert den Kernel und kopiert ihn auf eine Diskette (Bootdisk)
make bzImage = Alte Methode. Erstellt Kernel in /usr/src/linux/arch/ARCHITEKTUR/boot/bzImage.
make bzdisk = Die neue Methode, eine Bootdisk mit großem (big) Kernel zu erstellen.

Teil C: Module übersetzen
Wenn man Teile des Kernels als Module konfiguriert hat, muss man nun diese ebenfalls kompilieren:

make modules = Übersetzen der Module

Schritt 5: Kernel und Module installieren

Wenn bis hierhin alles geklappt hat, können der Kernel und die Module nun installiert werden:

make modules_install = Kopiert die Moduldaten in das Verzeichnis /lib/modules/KERNEL-VERSION

Anschließend kopiert man nun den Kernel aus /usr/src/linux/arch/ARCHITEKTUR/boot/bzImage in das /boot Verzeichnis und konfiguriert den Bootloader so, dass nun der neue Kernel genutzt wird. Beim nächsten Neustart bootet man dann Linux in der neuen Version.