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 updateDann installieren wir alle benötigten Pakete wie folgt:
apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential2.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.bz2Dann 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/linux2.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 -p1Der 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 -p12.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` ./.configDann führen wir aus
make menuconfigwas 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:

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_headersNach –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 -lAuf 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 nowWä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 -rDies sollte etwas anzeigen wie
2.6.21.3-customWenn 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 updateDann installieren wir alle benötigten Pakete wie folgt:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential3.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.bz2Dann 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/linux3.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 -p1Der 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 -p13.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` ./.configDann führen wir aus
make menuconfigwas 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 installSeien 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 yairdDann erstellen wir ein Ramdisk mit dem folgenden Befehl:
mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3Die GRUB-Konfiguration ist sehr einfach auf Debian Etch. Alles, was wir tun müssen, ist auszuführen
update-grubDies 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 nowWä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 -rDies sollte etwas anzeigen wie
2.6.21.3Wenn 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
- Debian: http://www.debian.org
- Die Linux Kernel Archive: http://www.kernel.org
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.