Wie man einen Kernel kompiliert - Debian Etch - Seite 2

3 Erstellen eines Kernels auf traditionelle Art und Weise

Dieses Kapitel beschreibt einen weiteren Ansatz, der auf jedes Linux System (von einigen Details wie das Erstellen einer Ramdisk oder Aktualisieren des Bootloaders abgesehen) angewandt werden kann. Natürlich wirst Du am Ende kein Kernel .deb Paket haben.

3.1 Installation benötigter Pakete für die Kernel Kompilierung

Zuerst aktualisieren wir unsere Paketdatenbank:

apt-get update

Dann installieren wir alle benötigten Pakete wie folgt:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential


3.2 Die Kernel-Quellen runter laden

Als Nächstes laden wir unseren Kernel nach /usr/src. Gehe zu www.kernel.org und wähle den Kernel aus, den Du installieren möchtest, z.B. linux-2.6.21.3.tar.bz2 (hier findest Du alle 2.6 Kernel: http://www.kernel.org/pub/linux/kernel/v2.6/). Dann kannst Du ihn in /usr/src wie folgt laden:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

Dann entpacken wir die Kernel-Quellen und erstellen einen Symlink linux zum Kernel-Quellen-Verzeichnis:

tar xjf linux-2.6.21.3.tar.bz2
ln -s linux-2.6.21.3 linux
cd /usr/src/linux

3.3 Anwenden von Patches auf die Kernel-Quellen (optional)

Manchmal benötigst Du Treiber für Hardware, die von dem neuen Kernel standardmäßig nicht unterstützt wird, oder Du brauchst Unterstützung für Virtualisierungstechniken oder eine andere brandneue Technologie, die beim Kernel nocht nicht angekommen ist. In all diesen Fällen musst Du die Kernel-Quellen patchen (vorausgesetzt es ist ein Patch verfügbar...).

Gehen wir davon aus, dass Du den benötigten Patch nach /usr/src geladen hast (ich nenne ihn in diesem Beispiel patch.bz2). So wendest Du ihn auf Deine Kernel-Quellen an (immer noch im /usr/src/linux Verzeichnis):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

Der erste Befehl ist nur ein Test, er wirkt sich nicht auf Deine Quellen aus. Wenn keine Fehler angezeigt werden, kannst Du den zweiten Befehl ausführen, der den Patch anwendet. Tu das nicht, wenn der erste Befehl Fehler anzeigt!

Weiterhin kannst Du Kernel Prepatches auf Deine Kernel-Quellen anwenden. Wenn Du zum Beispiel eine Funktion benötigst, die nur in Kernel 2.6.22-rc3 enthalten ist, die gesamten Quellen für diesen Kernel aber noch nicht veröffentlicht wurden. Stattdessen ist ein patch-2.6.22-rc3.bz2 verfügbar. Du kannst diesen Patch auf die 2.6.21 Kernel-Quellen anwenden, aber nicht auf Kernel 2.6.21.1 oder 2.6.21.2, etc. Dies wird hier erklärt: http://kernel.org/patchtypes/pre.html:

Prepatches sind das Equivalent zu alpha Veröffentlichungen für Linux; sie befinden sich in den Test-Verzeichnissen der Archive. Sie sollten mittels des patch(1) Programmes auf den Source Code der vorherigen Vollversion mit einer 3-stelligen Versionsnummer angewendet werden (zum Beispiel sollte der 2.6.12-rc4 Prepatch auf die 2.6.11 Kernel-Quellen angewendet werden und nicht auf 2.6.11.10.)Wenn Du also einen 2.6.22-rc3 Kernel kompilieren möchtest, musst Du die 2.6.21 Kernel-Quellen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) anstelle des Kernels 2.6.21.3 in Schritt 3 runter laden!

So wendest Du den 2.6.22-rc3 Patch auf Kernel 2.6.21 an:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

3.4 Konfiguration des Kernels

Es macht sich immer gut die Konfiguration Deines derzeitig funktionsfähigen Kernels als Basis für Deinen neuen Kernel zu verwenden. Daher kopieren wir die vorhandene Konfiguration nach /usr/src/linux:

make clean && make mrproper
cp /boot/config-`uname -r` ./.config

Dann führen wir Folgendes aus

make menuconfig

was das Kernel Konfigurationsmenü aufruft. Gehe zu Load an Alternate Configuration File und wähle .config (die die Konfiguration Deines derzeit funktionsfähigen Kernel enthält) als Konfigurationsdatei:



Durchsuche dann das Kernel Konfigurationsmenü und treffe Deine Auswahl. Wenn dies abgeschlossen ist und Du Exit gewählt hast, beantworte folgende Frage (Do you wish to save your new kernel configuration?) mit Yes:

3.5 Den Kernel erstellen und installieren

Um den Kernel zu erstellen, führe diese Befehle aus:

make all
make modules_install
make install

Sei nun geduldig, die Kompilierung des Kernels kann einige Stunden dauern, das hängt von Deiner Kernel Konfiguration und Deiner Prozessorgeschwindigkeit ab.

3.6 Schritte nach der Installation

Der neue Kernel ist nun installiert, jedoch benötigen wir noch eine Ramdisk für unseren neuen Kernel (sonst wird das System wahrscheinlich nicht starten!) und wir müssen dem GRUB Bootloader von unserem neuen Kernel unterrichten.

Zuerst führen wir Folgendes aus:

depmod 2.6.21.3
apt-get install yaird

Dann erstellen wir eine Ramdisk mit folgendem Befehl:

mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

Die GRUB Konfiguration ist auf Debian Etch sehr einfach. Wir müssen nur Folgendes ausführen

update-grub

Der neue Kernel und die Ramdisk werden somit erkannt und /boot/grub/menu.lst wird für uns aktualisiert.

Starte nun das System neu:

shutdown -r now

Wähle bei der Startaufforderung Deinen neuen Kernel aus (sollte bereits ausgewählt sein). Wenn alles gut geht, dann sollte der Server mit dem neuen Kernel starten. Indem Du Folgendes ausführst, kannst Du überprüfen, ob wirklich Dein neuer Kernel verwendet wird

uname -r

Dies sollte etwas in der Art anzeigen

2.6.21.3

Wenn das System nicht startet, starte es neu und wähle bei der Startaufforderung Deinen alten Kernel aus. Du kannst nun erneut versuchen, einen funktionsfähigen Kernel zu kompilieren. Vergiss nicht die Zeile(n) des nicht-funktionsfähgien Kernels aus /boot/grub/menu.lst zu entfernen.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte