Auf einem Debian GNU/Linux-System gibt es grundsätzlich zwei verschiedene Verfahren, um einen individuellen Kernel zu erzeugen. Zunächst ist es natürlich möglich, alle Arbeitsschritte auf klassischem Wege „zu Fuß“, wie auf jedem anderen Linux-System, durchzuführen. Die elegantere Methode ist es jedoch, ein eigenes Debian-Kernel-Paket zu erzeugen und dieses zu installieren.
Sehen wir uns zunächst die etwas elegantere Debian Methode an; die klassische Methode werden wir später besprechen.
Auf aktuellen Debian-Systemen sollte ein eigener Kernel nach Möglichkeit als Debian-Paket gebaut werden. Das erleichtert Installation, Entfernung und Wiederherstellung. Für viele Anpassungen reichen die von Debian gelieferten Kernelpakete; installieren Sie zuerst das passende Metapaket, bevor Sie einen eigenen Kernel bauen.
sudo apt update sudo apt install build-essential fakeroot dpkg-dev apt source linux
Die genaue Bauprozedur des Debian-Kernel-Quellpakets hängt von der Version ab und ist in den Dateien und der Dokumentation des Quellpakets beschrieben. Verwenden Sie nicht unbesehen Befehle aus Anleitungen für alte Kernel-Versionen.
make-kpkg aus dem Paket kernel-package gehört zu älteren Kernel-Bauanleitungen und ist nicht die empfohlene Standardmethode für Debian 13. Bevorzugen Sie die von Debian gepflegten Build-Anweisungen und erzeugen Sie installierbare Debian-Pakete. Alte Optionen, Patch-Sammlungen oder Verzeichnisnamen dürfen nicht ungeprüft auf aktuelle Kernel-Quellen übertragen werden.
Aktuelle Alternative: Wenn ein eigener Kernel als Debian-Paket benötigt wird, verwenden Sie die zu Kernelquelle und Zielsystem passenden Debian-Bauanweisungen und Werkzeuge wie make bindeb-pkg, sofern vom jeweiligen Kernel unterstützt. Für Paketänderungen gelten die aktuelle Debian Policy und die Kernel-Dokumentation. Vor einer Veröffentlichung sind Paketinhalt, Abhängigkeiten und Installations-/Entfernungsverhalten in einer Testumgebung zu prüfen.
Mit der Debian Distribution werden neben den Sourcen für die in Debian
selbst verwendeten Kernel auch eine Reihe Kernel-Patches geliefert, die in eigene
Kernel integriert werden können. Ein guter Einstieg für die ersten Versuche ist der
kernel-patch-debianlogo; dieser Patch ersetzt den
beim Systemstart angezeigten Pinguin durch ein Debian Logo. Bei der ersten Installation eines solchen
Debian Kernel-Patches wird in
/usr/src/ das Verzeichnis
kernel-patches angelegt.
Die Installation eines solchen Kernel-Patch-Pakets wendet den Patch noch nicht
an; dies geschieht erst mit dem Aufruf von
make-kpkg:
bash$ fakeroot make-kpkg --append-to-version=030825 \ --added-patches=debianlogo kernel_image modules_image
Das Kommando fakeroot wird dabei benutzt, um beschränkte
administrative Rechte auch als normaler Benutzer zu erlangen.
Wenn weitere Patches in den Kernel eingespielt werden sollen, können diese durch
Kommata getrennt an der Option --added-patches angegeben werden.
Normalerweise benutzt make-kpkg
„make oldconfig“, nachdem die Patches angewendet wurden. Wenn von den
Patches neue Kernel-Optionen benötigt werden, so werden diese abgefragt. Alternativ
kann auch die Option --config=menuconfig benutzt werden, um die komplette
Konfiguration zu überprüfen.
In einigen Fällen kann es notwendig sein, den Linux-Kernel an die eigenen Bedürfnisse anzupassen. Debian GNU/Linux installiert einen Standard-Kernel, der in den meisten Fällen ausreichend ist. Zusätzliche Treiber können über Module im laufenden Betrieb hinzugeladen werden.
Um aus den Kernel-Sourcen einen lauffähigen Kernel zu erzeugen, müssen die Quelltexte mittels eines passenden Compilers übersetzt werden. Der komplette Linux-Kernel wurde in der Programmiersprache C geschrieben - mit Ausnahme einiger ganz weniger Zeilen, die aus Geschwindigkeitsgründen in der Maschinensprache Assembler geschrieben wurden. Übrigens steht unter Linux der gcc (GNU Compiler Collection) - eine freie Implementierung eines C-Compilers - zur Verfügung.
Es werden folgende Pakete benötigt, um einen Kernel selbst zu erzeugen:
binutils - Der GNU-Assembler, -Linker
und einige Zusatzprogramme.
libc6-dev - GNU C-Bibliothek,
Entwicklerpaket.
gcc - Der eigentliche GNU (EGCS)
C-Compiler.
make - GNU-Version von
„make“.
bin86 - Ein 16-Bit-Assembler.
Nützlich, aber nicht zwingend erforderlich, sind weiterhin folgende Pakete:
libncurses5-dev -
Entwickler-Bibliotheken und Dokumentation für ncurses.
tkstep8.0-dev - NeXTStep ähnliche
Version des Tk-Toolkits. (oder tk8.0-dev oder tkstep4.2-dev oder tk4.2-dev).
kernel-package - Debian
Linux-Kernel-Paket-Skripte.
Soll ein individuell auf das System angepasster Kernel installiert werden, so ist es zuerst nötig, die Kernel-Sourcen (Quellcode) zu installieren. Für den ersten Versuch ist es ratsam, die gleiche Kernel-Version zu installieren, die auch schon vom Installationsprogramm installiert wurde. Der Befehl
cat /proc/version
gibt Ihnen die installierte Version aus. Installieren Sie nun (mit dselect, dpkg oder apt) die Sourcen zu diesem Kernel.
Die Kernel-Sourcen werden vom Installationsprogramm unter
/usr/src/ als Datei linux-source-2.x.x.tgz abgelegt und müssen noch
von Hand entpackt werden. Dies wird mit dem Befehl
tar xvfz linux-source-2.x.x.tgz
erreicht. Die entpackten Sourcen finden sich nun in dem Verzeichnis linux-source-2.x.x/.
Dass die Debian Quellcodes des Kernels als ein Archiv installiert werden, mag auf den ersten Blick seltsam erscheinen, da ja durch das Entpacken sogar noch mehr Speicherplatz belegt wird. Dies hat aber bei näherer Betrachtung einen guten Grund. Das Debian Paketmanagement führt eine Datenbank über alle installierten Pakete und die dazugehörigen Dateien. Würde nun ein Kernel-Quellcode-Paket entpackt installiert werden, so würden die Anwender direkt mit diesen Dateien arbeiten und diese eventuell gar verändern. Damit wäre die zentrale Kontrolle umgangen.
Auf den Servern finden sich die aktuellen Archive des Linux-Kernels auch in
einer mit bzip2 (anstatt mit gzip) komprimierten Form. Diese Archive sind noch einmal ein wenig
kleiner, da bzip2 bessere Kompressionsalgorithmen verwendet. Die so gepackten
Archive enden auf .bz2. Diese Archive können ebenfalls mit tar entpackt werden; hierzu ist aber die Option -j statt -z anzugeben. Beachten Sie: Es sind
zwischenzeitlich einige Versionen von tar im Umlauf gewesen, bei denen für
bzip2-komprimierte Archive die Option -I zu verwenden ist.
Wechseln Sie nun in das Verzeichnis, in dem Sie vorher die Kernel-Sourcen
entpackt haben. Mit dem Kommando make config erzeugen Sie die benötigte
Konfigurationsdatei. Sie können hier den Kernel individuell an Ihre eigene
Hardware anpassen. Bei vielen Optionen haben Sie die Möglichkeit, zwischen fest
im Kernel integrierten Treibern „
*
“ oder Modulen „
M
“ zu wählen. Achten Sie darauf, nur die nötigen Treiber fest in den
Kernel einzubinden, da sonst der Kernel zu groß wird und nicht mehr von lilo geladen werden kann. Gute Kandidaten auf
der Liste der Module sind alle Treiber, die nicht zum unmittelbaren Systemstart
benötigt werden (Netzwerk, Bandlaufwerke).
Neben make config stehen Ihnen alternativ die Befehle make menuconfig mit einer textbasierten
Oberfläche ähnlich wie bei dselect sowie make xconfig unter X11 zur Verfügung. Diese
erleichtern kleine Änderungen am Kernel sehr, da die gewünschten Einstellungen
direkt anzuwählen sind.
Wenn Sie die Option menuconfig benutzen wollen, muss das Paket libncurses5-dev installiert sein; dieses stellt
die notwendigen Funktionen für die textbasierte Oberfläche zur Verfügung.
Nachdem Sie die gewünschten Einstellungen gemacht haben, werden mit dem Befehl make dep die Abhängigkeiten geprüft. Ein make clean räumt noch übrig gebliebene Dateien
von der Festplatte. Einen neuen Kernel erzeugen Sie mit dem Befehl make bzImage. Zum Übersetzen des Kernels müssen
neben einem C-Compiler auch die Pakete bin86 und natürlich make (das haben Sie aber sicher vorher schon
bemerkt) installiert sein. Nach einiger Zeit (wenn alles ohne Fehlermeldungen
über die Bühne gegangen ist) finden Sie den neuen Kernel unter /usr/src/linux-source-2.x.x/arch/i386/boot/.
Dieser muss nun noch an die passende Stelle (bei Debian üblicherweise /boot/) kopiert werden. Abschließend ist die
Konfiguration von lilo zu prüfen und ggf. anzupassen.
Statt make bzImage können Sie auch make bzlilo verwenden: Dieser Befehl kopiert den
Kernel nach /vmlinuz und benennt vorher den schon
vorhandenen Kernel in vmlinuz.old um. Danach wird automatisch lilo aufgerufen, und somit steht der Kernel dann
ab dem nächsten Neustart zur Verfügung.
Sie können nun die Treiber, die Sie bei der Konfiguration als Module
ausgewählt haben, übersetzen. Dies geschieht mit dem Befehl make modules. Nach dem Übersetzen der Module
werden diese mit make modules_install an den richtigen Ort
kopiert.
Benutzen Sie das Zeichen „
&
“, um mehrere Kommandos nacheinander auszuführen. Sie müssen so nicht die
einzelnen Schritte beim Übersetzen eines neuen Kernels abwarten. make dep && make clean &&
make bzlilo && make modules && make
modules_install erledigt einen kompletten Durchlauf ohne Pause.
Probieren Sie einfach einmal, den Kernel mit der Option -s zu übersetzen, also:
make -s zImage oder make -s bzImage. Bei einem so übersetzten Kernel
werden lediglich Warnungen und Fehlermeldungen des Kernels beim Systemstart
ausgegeben. Alle Ausgaben der Treiber werden unterdrückt.
Sie können das Übersetzen des Kernels beschleunigen, indem Sie den Parameter
-j # einfügen, wobei # für eine (fast beliebige) Zahl steht. Mit
diesem Parameter werden, entsprechend der angegebenen Zahl, mehrere Prozesse
gestartet und Teile des Kernels gleichzeitig übersetzt. Sinnvolle Werte für die
Anzahl der Prozesse sind in erster Linie vom Ausbau des
Hauptspeichers (RAM) abhängig. Auf Systemen mit mehreren Prozessoren
wirkt sich dies natürlich auch positiv aus. Bedenken Sie bitte, dass zu hoch
gewählte Werte zum Auslagern (Swappen) führen und den Vorgang merklich verlangsamen.
Um festzustellen, welcher Wert sinnvoll ist, benutzen Sie das Kommando time make -j 10 bzImage und variieren den Wert
für die Anzahl der Prozesse.
Sollten Sie nach dem Übersetzen der Module mit
make modules; make modules_install Probleme
haben, diese zu laden, liegt dies wahrscheinlich daran, dass die Datei
modules.dep, in der die Abhängigkeiten
(dependencies) beschrieben sind, nicht aktuell ist. Es ist nicht nötig, in
dieser Datei irgendetwas von Hand zu ändern: Der Befehl
depmod -a 2.6.x erstellt eine aktuelle Datei für
Sie, wobei 2.6.x der neuen Kernel-Version entspricht.
Wenn Sie viele verschiedene Kernel-Versionen auf der Festplatte halten, kann
es vorkommen, dass Fehlermeldungen in der Form Warning: /boot/System.map has an incorrect kernel
version. erscheinen. Neben der Möglichkeit, je eine Version der System.map in /boot/ und eine weitere in
/usr/src/linux/ zu halten (was maximal zwei
Versionen erlaubt), bietet Debian GNU/Linux sozusagen eine
„Komplettlösung“.
Das Skript
/etc/init.d/klogd startet beim Systemstart den klogd. Sie können am Anfang dieses Skriptes in
der Variablen KLOGD als Parameter
-k /boot/System.map-$(uname -r) angeben. Eine
entsprechende Zeile findet sich bereits vorbereitet in dem Skript. So wird je
nach verwendeter Kernel-Version eine passende System.map aus /boot/ geladen. Diese müssen Sie nach dem
Übersetzen des Kernels in das Verzeichnis /boot/ kopieren und passend zur Kernel-Version
benennen. Am einfachsten können Sie das mit folgendem Kommando erledigen: cp /usr/src/linux/System.map /boot/System.map-`uname
-r`.
Hier sehen Sie ein kleines Skript, das in
/boot/ nach Kerneln sucht und eine passende lilo.conf erstellt, mit dem neuesten Kernel als Standardkernel.
#!/bin/bash umask 772 kernel_dir=/boot # lilo assumes the default image is the first one in lilo.conf, so # we sort the kernel images backwards, hence the highest-version'd kernel # will be the default. images=`cd $kernel_dir >> ls -1 vmlinuz-* \ | egrep "vmlinuz-([0-9]+).([0-9]+).([0-9]+)[^-]*$" \ | sort -rn` cp -f /etc/lilo.conf.static /tmp/lilo.conf # three lines per entry, 3 x 19 images = 57 ( for img in $images ; do label=`echo $img | sed 's/vmlinuz/linux/ ; s/-//g ; s/\.//g'` echo "image=$kernel_dir/$img" echo "label=$label" echo "" done ) | head -57 >> /tmp/lilo.conf if /sbin/lilo -C /tmp/lilo.conf ; then mv -f /etc/lilo.conf /etc/lilo.conf.last cp -f /tmp/lilo.conf /etc/lilo.conf echo successfully installed new bootloader. rm -f /tmp/lilo.conf exit 0 else echo eek, lilo barfed rm -f /tmp/lilo.conf exit 1 fi
Wenn Sie einen der neueren Kernel (2.3.x oder 2.4.x) mit Debian GNU/Linux 2.2
verwenden möchten, sollten Sie folgende Zeile in die Datei
/etc/fstab einfügen:
none /var/shm shm defaults 0 0
Ab der Kernel-Version 2.3.51 wurde das „Shared-Memory“-Dateisystem eingeführt.
©
1999 - 2026 | Das Debian GNU/Linux Anwenderhandbuch von Frank Ronneburg steht unter der Creative Commons Namensnennung-Nicht kommerziell-Keine Bearbeitungen 4.0 International Lizenz (CC BY-NC-ND 4.0).