Wie man einen Kernel kompiliert - auf Fedora - Seite 3

3 Wie man den Kernel auf traditionelle Art und Weise baut

Dieses Kapitel beschreibt einen anderen Ansatz, der auf jedem Linux System angewandt werden kann. Da daran nichts Fedora-spezifisch ist, erhältst Du am Ende natürlich auch kein Kernel rpm Paket.

3.1 Die Kernelquellen runter laden

Wir laden unseren gewünschten 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.18.2.tar.bz2 (hier findest Du alle 2.6 Kernel: http://www.kernel.org/pub/linux/kernel/v2.6/). Dann kannst Du ihn wie folgt nach /usr/src laden:

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

Dann entpacken wir die Kernelquellen und erstellen einen Symlink linux zum Kernelquellen Verzeichnis:

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

3.2 Patches in den Kernelquellen anbringen (optional)

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

Gehen wir nun davon aus, dass Du den benötigten Patch (ich nenne ihn in diesem Beispiel patch.bz2) nach /usr/src geladen hast. So bringst Du ihn in Deinem Kernelquellen an (Du musst Dich immer noch im /usr/src/linux Verzeichnis befinden):

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 und ändert nichts an Deinen Quellen. Wenn er keine Fehler anzeigt, kannst Du den zweiten Befehl ausführen, der den Patch tatsächlich anbringt. Tu das nicht, wenn der erste Befehl Fehler angezeigt hat!

Du kannst auch Kernel Prepatches in Deinen Kernelquellen anbringen. Wenn Du zum Beispiel eine Funktion brauchst, die nur in Kernel 2.6.19-rc5 verfügbar ist, die gesamten Quellen für diesen Kernel aber noch nicht veröffentlicht wurden. Stattdessen ist ein patch-2.6.19-rc5.bz2 verfügbar. Du kannst diesen Patch in den 2.6.18 Kernelquellen anbringen, aber nicht in Kernel 2.6.18.1 oder 2.6.18.2, etc. Dies wird auf http://kernel.org/patchtypes/pre.html erklärt:

"Prepatches are the equivalent to alpha releases for Linux; they live in the testing directories in the archives. They should be applied using the patch(1) utility to the source code of the previous full release with a 3-part version number (for example, the 2.6.12-rc4 prepatch should be applied to the 2.6.11 kernel sources, not, for example, 2.6.11.10.)"
Wenn Du also einen 2.6.19-rc5 Kernel kompilieren möchtest, musst Du die 2.6.18 Kernelquellen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2) in Schritt 3.1 anstelle von Kernel 2.6.18.2 runter laden!

So bringst Du den 2.6.19-rc5 Patch in Kernel 2.6.18 an:

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

3.3 Den Kernel konfigurieren

Es ist eine gute Idee, die Kofiguration Deines derzeit funktionstüchtigen Kernels als Basis für Deinen neuen Kernel zu verwenden. Daher kopieren wir die vorhandene Konfiguration nach /usr/src/linux:

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

Dann führen wir dies aus

make menuconfig

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



Durchblättere dann das Kernel Konfigurationsmenü und treffe Deine Wahl. Wenn Du damit fertig bist und Exit wählst, beantworte folgende Frage (Do you wish to save your new kernel configuration?) mit Yes:

3.4 Den Kernel bauen und installieren

Um den Kernel bauen und installieren zu können, führe diese drei Befehle aus:

make all
make modules_install
make install

Sei nun geduldig, die Kompilierung des Kernels kann einige Stunden dauern, je nach Kernelkonfiguration und Prozessorgeschwindigkeit. Der letzte Befehl erstellt außerdem automatisch eine Ramdisk und konfiguriert /boot/grub/menu.lst für Dich.

Bearbeite nun /boot/grub/menu.lst. Du müsstest eine Zeile für Deinen neuen Kernel zu Beginn der Liste finden. Um jedoch sicher zu stellen, dass der neue Kernel und nicht der alte gestartet wird, musst Du den Wert von default auf 0 setzen.

vi /boot/grub/menu.lst

Mein menu.lst sieht wie folgt aus:
# grub.conf generated by anaconda
# # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00 # initrd /initrd-version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora Core (2.6.18.2) root (hd0,0) kernel /vmlinuz-2.6.18.2 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18.2.img title Fedora Core (2.6.18-1.2798.fc6) root (hd0,0) kernel /vmlinuz-2.6.18-1.2798.fc6 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.18-1.2798.fc6.img
Starte nun das System neu:

shutdown -r now

Wenn alles klappt, sollte der neue Kernel gestartet werden. Ob auch wirklich der neue Kernel verwendet wird, kannst Du überprüfen, indem Du Folgendes ausführst

uname -r

Dies solle etwas in der Art anzeigen

2.6.18.2

Wenn das System nicht startet, starte es neu und wenn Du dies siehst:


drücke irgendeine Taste um ins GRUB Menü zu gelangen:


Wähle Deinen alten Kernel aus und starte das System. Nun kannst Du erneut versuchen, einen funktionierenden Kernel zu kompilieren. Vergiss nicht die Zeile des defekten Kernels aus /boot/grub/menu.lst zu entfernen.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte