Wie man einen Kernel kompiliert - Mandriva

Version 1.0
Author: Falko Timme


Jede Distribution hat besondere Tools, mit denen sie einen benutzerdefinierten Kernel aus den Quellen kompiliert. Diese Anleitung veranschaulicht, wie man einen Kernel auf Mandriva Systemen kompiliert. Sie beschreibt, wie man einen benutzerdefinierten Kernel baut, unter Verwendung der neusten unveränderten Kernelquellen von www.kernel.org (Vanilla Kernel) damit Du nicht an die Kernel, die von Deiner Distribution bereitgestellt werden, gebunden bist. Weiterhin wird gezeigt, wie man die Kernelquellen patcht, falls Funktionen benötigt werden, die darin nicht enthalten sind.

Ich habe dies auf Mandriva Free 2007 getestet.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ziel dieser Anleitung ist es, ein Kernel rpm Paket zu bauen, das auf dem System installiert werden kann, das Du mit anderen teilen kannst und das Du auf anderen Mandriva Systemen installieren kannst, was im Vergleich zum "traditionellen Weg" einen ziemlichen Vorteil darstellt, da Du am Ende ein rpm Paket erhältst.

2 Die Kernel Quellen runter laden

Zuerst laden wir 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.3.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 runter laden:

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

Dann entpacken wir die Kernel Quellen und erstellen einen Symlink linux zu dem Kernel Quellverzeichnis:

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

3 Anbringen von Patches in den Kernelquellen (optional)

Manchmal benötigt man Treiber für Hardware, die vom neuen Kernel nicht standardmäßig unterstützt wird, oder Du benötigst Unterstützung für Virtualisierungstechniken oder für brandneue Technologie, die es noch nicht zum Kernel geschafft hat. In all diesen Fällen musst Du die Kernelquellen patchen (vorausgesetzt, es ist ein Patch verfügbar...).

Lass uns nun davon ausgehen, dass Du den benötigten Patch (in diesem Beispiel nenne ich ihn patch.bz2) nach /usr/src runter geladen hast. So bringst Du ihn in Deinen 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 anbringt. Tu das nicht, wenn der erste Befehl Fehler anzeigt!

Wenn Deine Patches mit gzip (.gz) anstelle von bzip2 (.bz2) komprimiert sind, dann patchst Du Deinen Kernel wie folgt:

gunzip -c /usr/src/patch.gz | patch -p1 --dry-run
gunzip -c /usr/src/patch.gz | patch -p1

Du kannst außerdem Kernel Prepatches in Deinen Kernelquellen anbringen. Wenn Du beispielsweise eine Funktion brauchst, die nur in Kernel 2.6.19-rc6 verfügbar ist, die vollständigen Quellen für diesen Kernel aber noch nicht veröffentlicht sind. Stattdessen ist ein patch-2.6.19-rc6.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 oder 2.6.18.3, etc. Dies wird hier erklärt: http://kernel.org/patchtypes/pre.html:

"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 alos einen 2.6.19-rc6 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 2 anstelle von Kernel 2.6.18.3 runter laden!

So bringst Du den 2.6.19-rc6 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-rc6.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc6.bz2 | patch -p1

4 Konfiguration des Kernels

Es ist keine schlechte Idee die Konfiguration Deines derzeitig funktionstüchtigen Kernels als Baisis für Deinen neuen Kernel zu verwenden. Dazu kopieren wir die vorhandene Konfiguration nach /usr/src/linux:

make clean && 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 (was die Konfiguration Deines derzeitig funktionstüchtigen Kernels enthält) als Konfigurationsdatei:



Durchblättere dann das Kernel Konfigurationsmenü und treffe Deine Auswahl. Pass auf, dass unter General Setup ---> () Local version - append to kernel release eine Zeichenfolge zur Indentifizierung Deiner Kernelversion definierst. Ich verwende -default, somit heißt unser Kernel rpm Paket kernel-2.6.18.3default-1.i386.rpm. Du kannst die Zeichenfolge frei lassen oder eine andere festlegen, die Dir dabei hilft, den Kernel zu identifizieren (z.B. -custom oder was auch immer Du möchtest).

Bitte beachte: Nachdem Du kernel-2.6.18.3default-1.i386.rpm installiert Dich entschlossen hast, ein anderes 2.6.18.3 Kernel rpm Paket zu kompilieren, ist es wichtig, eine andere Zeichenfolge für die Versionsnummer zu verwenden, z.B. -default1, -default2, etc., da Du Deinen neuen Kernel sonst nicht installieren kannst, weil sich rpm beschwert, dass  kernel-2.6.18.3default-1.i386.rpm bereits installiert ist!




0 Kommentar(e)

Zum Posten von Kommentaren bitte