Kernel Kompilierung · 9 min read · Nov 27, 2025

Wie man einen Kernel - auf die Debian-Art kompiliert

Jede Distribution hat spezifische Werkzeuge, um einen benutzerdefinierten Kernel aus den Quellen zu erstellen. Dieser Artikel handelt vom Kompilieren eines Kernels auf einem Debian (Etch) System. Er beschreibt, wie man einen benutzerdefinierten Kernel mit den neuesten unveränderten Kernelquellen von www.kernel.org (vanilla kernel) erstellt, sodass man unabhängig von den von der Distribution bereitgestellten Kernels ist. Er zeigt auch, wie man die Kernelquellen patcht, wenn man Funktionen benötigt, die dort nicht enthalten sind.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

Ich werde zwei Möglichkeiten beschreiben, einen neuen Kernel zu kompilieren. Mit der ersten Methode erhalten Sie ein Kernel.deb-Paket, das auf dem System installiert werden kann und das Sie mit anderen teilen und auf anderen Debian Etch-Systemen installieren können.

Die zweite Methode besteht darin, einen Kernel auf die “traditionelle” Weise zu kompilieren. Diese Methode funktioniert auf jeder Linux-Distribution, aber natürlich erhalten Sie kein Kernel.deb-Paket.

2 Erstellen eines Kernel .deb-Pakets

Dieses Kapitel zeigt, wie man einen Kernel erstellt und ein .deb-Paket erhält, das Sie installieren und mit anderen teilen können.

2.1 Installieren der erforderlichen Pakete für die Kernelkompilierung

Zuerst aktualisieren wir unsere Paketdatenbank:

apt-get update

Dann installieren wir alle benötigten Pakete wie folgt:

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

2.2 Herunterladen der Kernelquellen

Als nächstes laden wir unseren gewünschten Kernel nach /usr/src herunter. Gehen Sie zu www.kernel.org und wählen Sie den Kernel aus, den Sie installieren möchten, z.B. linux-2.6.21.3.tar.bz2 (Sie finden alle 2.6-Kernel hier: http://www.kernel.org/pub/linux/kernel/v2.6/). Dann können Sie ihn wie folgt nach /usr/src herunterladen:

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

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

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

2.3 Anwenden von Patches auf die Kernelquellen (optional)

Manchmal benötigt man Treiber für Hardware, die vom neuen Kernel standardmäßig nicht unterstützt wird, oder man benötigt Unterstützung für Virtualisierungstechniken oder andere neueste Technologien, die es noch nicht in den Kernel geschafft haben. In all diesen Fällen müssen Sie die Kernelquellen patchen (vorausgesetzt, es gibt einen verfügbaren Patch…).

Angenommen, Sie haben den benötigten Patch (ich nenne ihn in diesem Beispiel patch.bz2) nach /usr/src heruntergeladen. So wenden Sie ihn auf Ihre Kernelquellen an (Sie müssen sich weiterhin im Verzeichnis /usr/src/linux 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, er tut nichts an Ihren Quellen. Wenn er keine Fehler anzeigt, können Sie den zweiten Befehl ausführen, der tatsächlich den Patch anwendet. Tun Sie dies nicht, wenn der erste Befehl Fehler anzeigt!

Sie können auch Kernel-Vorpatches auf Ihre Kernelquellen anwenden. Wenn Sie beispielsweise eine Funktion benötigen, die nur im Kernel 2.6.22-rc3 verfügbar ist, die vollständigen Quellen jedoch noch nicht für diesen Kernel veröffentlicht wurden. Stattdessen ist ein patch-2.6.22-rc3.bz2 verfügbar. Sie können diesen Patch auf die 2.6.21 Kernelquellen anwenden, jedoch nicht auf Kernel 2.6.21.1 oder 2.6.21.2 usw. Dies wird auf http://kernel.org/patchtypes/pre.html erklärt:

Vorpatches sind das Äquivalent zu Alpha-Versionen für Linux; sie leben in den Testverzeichnissen in den Archiven. Sie sollten mit dem patch(1) Utility auf den Quellcode der vorherigen vollständigen Version mit einer 3-teiligen Versionsnummer angewendet werden (zum Beispiel sollte der 2.6.12-rc4 Vorpatch auf die 2.6.11 Kernelquellen angewendet werden, nicht zum Beispiel auf 2.6.11.10.)

Wenn Sie also einen 2.6.22-rc3 Kernel kompilieren möchten, müssen Sie in Schritt 3 die 2.6.21 Kernelquellen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) anstelle des Kernels 2.6.21.3 herunterladen!

So wenden Sie 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

2.4 Konfigurieren des Kernels

Es ist eine gute Idee, die Konfiguration Ihres aktuellen Arbeitskernels als Grundlage für Ihren 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 aus

make menuconfig

was das Kernelkonfigurationsmenü öffnet. Gehen Sie zu “Load an Alternate Configuration File” und wählen Sie .config (das die Konfiguration Ihres aktuellen Arbeitskernels enthält) als Konfigurationsdatei:

Kernel konfigurieren

Als .config-Datei speichern

Durchsuchen Sie dann das Kernelkonfigurationsmenü und treffen Sie Ihre Auswahl. Wenn Sie fertig sind und “Exit” auswählen, beantworten Sie die folgende Frage (Möchten Sie Ihre neue Kernelkonfiguration speichern?) mit Ja:

Neue Kernelkonfiguration speichern

2.5 Den Kernel erstellen

Um den Kernel zu erstellen, führen Sie diese beiden Befehle aus:

make-kpkg clean  
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

Nach –append-to-version= können Sie jede Zeichenfolge schreiben, die Ihnen hilft, den Kernel zu identifizieren, aber sie muss mit einem Minus (-) beginnen und darf keine Leerzeichen enthalten.

Seien Sie jetzt geduldig, die Kernelkompilierung kann einige Stunden dauern, abhängig von Ihrer Kernelkonfiguration und der Prozessorleistung.

2.6 Den neuen Kernel installieren

Nach dem erfolgreichen Erstellen des Kernels finden Sie zwei .deb-Pakete im Verzeichnis /usr/src.

cd /usr/src  
ls -l

Auf meinem Testsystem hießen sie linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (das den tatsächlichen Kernel enthält) und linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (das Dateien enthält, die benötigt werden, wenn Sie später zusätzliche Kernelmodule kompilieren möchten). Ich installiere sie wie folgt:

dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb  
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

(Sie können die beiden .deb-Dateien jetzt sogar auf andere Debian Etch-Systeme übertragen und sie dort genau auf die gleiche Weise installieren, was bedeutet, dass Sie den Kernel dort nicht erneut kompilieren müssen.)

Das war’s. Die GRUB-Bootloader-Konfigurationsdatei /boot/grub/menu.lst wurde automatisch geändert, und ein Ramdisk für den neuen Kernel wurde in /boot erstellt.

Jetzt starten Sie das System neu:

shutdown -r now

Wählen Sie an der Boot-Eingabeaufforderung Ihren neuen Kernel (sollte standardmäßig ausgewählt sein):

In neuen Kernel booten

Wenn alles gut geht, sollte er mit dem neuen Kernel hochfahren. Sie können überprüfen, ob er wirklich Ihren neuen Kernel verwendet, indem Sie ausführen

uname -r

Dies sollte etwas anzeigen wie

2.6.21.3-custom

Wenn das System nicht startet, starten Sie es neu und wählen Sie Ihren alten Kernel an der Boot-Eingabeaufforderung. Sie können jetzt erneut versuchen, einen funktionierenden Kernel zu kompilieren. Vergessen Sie nicht, die Stanza(en) des nicht funktionierenden Kernels aus /boot/grub/menu.lst zu entfernen.

3 Einen Kernel auf die traditionelle Weise erstellen

Dieses Kapitel beschreibt einen anderen Ansatz, der auf jedem Linux-System verwendet werden kann (abgesehen von Details wie dem Erstellen eines Ramdisks oder dem Aktualisieren des Bootloaders). Natürlich erhalten Sie kein Kernel.deb-Paket.

3.1 Installieren der erforderlichen Pakete für die Kernelkompilierung

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 Herunterladen der Kernelquellen

Als nächstes laden wir unseren gewünschten Kernel nach /usr/src herunter. Gehen Sie zu www.kernel.org und wählen Sie den Kernel aus, den Sie installieren möchten, z.B. linux-2.6.21.3.tar.bz2 (Sie finden alle 2.6-Kernel hier: http://www.kernel.org/pub/linux/kernel/v2.6/). Dann können Sie ihn wie folgt nach /usr/src herunterladen:

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

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

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 Kernelquellen (optional)

Manchmal benötigt man Treiber für Hardware, die vom neuen Kernel standardmäßig nicht unterstützt wird, oder man benötigt Unterstützung für Virtualisierungstechniken oder andere neueste Technologien, die es noch nicht in den Kernel geschafft haben. In all diesen Fällen müssen Sie die Kernelquellen patchen (vorausgesetzt, es gibt einen verfügbaren Patch…).

Angenommen, Sie haben den benötigten Patch (ich nenne ihn in diesem Beispiel patch.bz2) nach /usr/src heruntergeladen. So wenden Sie ihn auf Ihre Kernelquellen an (Sie müssen sich weiterhin im Verzeichnis /usr/src/linux 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, er tut nichts an Ihren Quellen. Wenn er keine Fehler anzeigt, können Sie den zweiten Befehl ausführen, der tatsächlich den Patch anwendet. Tun Sie dies nicht, wenn der erste Befehl Fehler anzeigt!

Sie können auch Kernel-Vorpatches auf Ihre Kernelquellen anwenden. Wenn Sie beispielsweise eine Funktion benötigen, die nur im Kernel 2.6.22-rc3 verfügbar ist, die vollständigen Quellen jedoch noch nicht für diesen Kernel veröffentlicht wurden. Stattdessen ist ein patch-2.6.22-rc3.bz2 verfügbar. Sie können diesen Patch auf die 2.6.21 Kernelquellen anwenden, jedoch nicht auf Kernel 2.6.21.1 oder 2.6.21.2 usw. Dies wird auf http://kernel.org/patchtypes/pre.html erklärt:

Vorpatches sind das Äquivalent zu Alpha-Versionen für Linux; sie leben in den Testverzeichnissen in den Archiven. Sie sollten mit dem patch(1) Utility auf den Quellcode der vorherigen vollständigen Version mit einer 3-teiligen Versionsnummer angewendet werden (zum Beispiel sollte der 2.6.12-rc4 Vorpatch auf die 2.6.11 Kernelquellen angewendet werden, nicht zum Beispiel auf 2.6.11.10.)

Wenn Sie also einen 2.6.22-rc3 Kernel kompilieren möchten, müssen Sie in Schritt 3 die 2.6.21 Kernelquellen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2) anstelle des Kernels 2.6.21.3 herunterladen!

So wenden Sie 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 Konfigurieren des Kernels

Es ist eine gute Idee, die Konfiguration Ihres aktuellen Arbeitskernels als Grundlage für Ihren 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 aus

make menuconfig

was das Kernelkonfigurationsmenü öffnet. Gehen Sie zu “Load an Alternate Configuration File” und wählen Sie .config (das die Konfiguration Ihres aktuellen Arbeitskernels enthält) als Konfigurationsdatei:

Durchsuchen Sie dann das Kernelkonfigurationsmenü und treffen Sie Ihre Auswahl. Wenn Sie fertig sind und “Exit” auswählen, beantworten Sie die folgende Frage (Möchten Sie Ihre neue Kernelkonfiguration speichern?) mit Ja:

3.5 Den Kernel erstellen und installieren

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

make all  
make modules_install  
make install

Seien Sie jetzt geduldig, die Kernelkompilierung kann einige Stunden dauern, abhängig von Ihrer Kernelkonfiguration und der Prozessorleistung.

3.6 Nachinstallationsschritte

Der neue Kernel ist jetzt installiert, aber wir benötigen noch ein Ramdisk für unseren neuen Kernel (ansonsten wird das System höchstwahrscheinlich nicht booten!), und wir müssen dem GRUB-Bootloader von unserem neuen Kernel erzählen.

Zuerst machen wir dies:

depmod 2.6.21.3  
apt-get install yaird

Dann erstellen wir ein Ramdisk mit dem folgenden Befehl:

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

Die GRUB-Konfiguration ist sehr einfach auf Debian Etch. Alles, was wir tun müssen, ist auszuführen

update-grub

Dies wird den neuen Kernel und das Ramdisk erkennen und /boot/grub/menu.lst für uns aktualisieren.

Jetzt starten Sie das System neu:

shutdown -r now

Wählen Sie an der Boot-Eingabeaufforderung Ihren neuen Kernel (sollte standardmäßig ausgewählt sein). Wenn alles gut geht, sollte er mit dem neuen Kernel hochfahren. Sie können überprüfen, ob er wirklich Ihren neuen Kernel verwendet, indem Sie ausführen

uname -r

Dies sollte etwas anzeigen wie

2.6.21.3

Wenn das System nicht startet, starten Sie es neu und wählen Sie Ihren alten Kernel an der Boot-Eingabeaufforderung. Sie können jetzt erneut versuchen, einen funktionierenden Kernel zu kompilieren. Vergessen Sie nicht, die Stanza(en) des nicht funktionierenden Kernels aus /boot/grub/menu.lst zu entfernen.

4 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.