Linux-Kernel anpassen und generieren

Willemers Informatik-Ecke

Linux als Serversystem einsetzen:
Bei Amazon bestellen
2015-05-02
Für Linux liegen die Quellen des Kernels offen vor und jeder, der sich dazu berufen fühlt, kann Kernelanpassungen durchführen. Dazu können die Kernel-Sourcen verändert werden oder die Konfiguration des Kernels angepasst werden. Der erste Schritt ist zwar möglich, wird aber nur im Ausnahmefall erforderlich oder sinnvoll sein.

Eher denkbar ist es, dass die Kernelkonfiguration bestimmten Bedingungen angepasst werden müssen. Eine Beschleunigung des Kernels ist allerdings auf diesem Weg eher selten zu erwarten, da auch die Standard-Kernel der Distributionen ja nicht von Anfänger zusammengestellt werden.

Bezug der Kernel-Quellen

Die meisten Distributionen bieten die Quelltexte des Kernels als Quelltexte an. Diese werden dann gern im Verzeichnis /usr/src abgelegt, können dort angepasst und übersetzt werden.

Die Quellen der Kernel-Sources können aber auch von der Website www.kernel.org heruntergeladen werden. Dort sind auch mehrere unterschiedliche Kernelversionen verfügbar.

Neuere Kernel liegen als tar-Paket mit xz-Komprimierung vor. Für die Dekomprimierung wird der Buchstabe x (statt eines z für gzip) eingesetzt.

tar xfx linux-x.y.z.tar.xz

Diese Kernel sollten nicht unbedingt in /usr/src hinterlegt werden, sondern jeweils in einem eigenen Verzeichnis unterhalb der Heimatverzeichnisse. Die Ablage in /usr/src hat nämlich folgende Nachteile:

Benötigte Werkzeuge und Pakete

Für die Kernelgenerierung werden Programme wie C-Compiler oder make benötigt. Diese befinden sich in dem Paket build-essential. Für die Konfiguration mit make menuconfig wird auch noch libncurses5-dev benötigt. Unter Debian oder Ubuntu installiert man sie mit dem folgenden Befehl:
apt-get install build-essential libncurses5-dev

Anpassen der Kernelquellenkonfiguration

Die Konfiguration eines Kernels steht in der Datei .config, die sich im Basisverzeichnis der Quellen befinden muss. Bei einem frisch heruntergeladenen Kernel gibt es keine solche Datei. Sie muss von Hand erstellt werden. Will man von einem installierten Kernel ausgehen und Änderungen durchführen, muss man dessen config-Datei als .config übernehmen.

Die kann man unter /proc/config.gz finden. Um sie zu verwenden, muss sie entpackt werden.

zcat /proc/config.gz > .config
Oft findet man sie auch im Verzeichnis /boot unter dem Namen config-x.z.y.

Man kann auch eine Standard-Konfiguration per make erzeugen.

make oldconfig
Auf der Basis einer solchen .config kann man nun das Menü zur Konfiguration aufrufen.
make menueconfig
Sie können hier den Prozessortyp genauer angeben, wenn Sie beispielsweise einen Kernel für einen bestimmte CPU benötigen. Sie können Treiber statisch zum Kernel hinzubinden oder als Modul nachladbar gestalten.

Wenn Sie das Menü verlassen, ist die Datei .config nach Ihren Wünschen angepasst worden.

Übersetzen des Kernels

Nun rugen Sie make auf. Dadurch wird der Kernel übersetzt. Beim ersten Mal kann dies durchaus lang dauern.

Mit der Option -j wird die Anzahl der maximalen parallelen Threads bei der Übersetzung angegeben. Man empfielt die doppelte Zahl der Prozessorkerne.

make -j 8
Aus dem Übersetzungslauf entstehen: Soll der Kernel auf dem System laufen, auf dem er generiert wurde, wird dies mit den folgenden Befehlen durchgeführt.
make install
make modules_install

Patch eines Kernels zu einem Realtime-Kernel

Ein Realtime-Kernel ist nicht etwa schneller als ein normaler Kernel, sondern garantiert ein Antwortverhalten in einer definierten Zeit.

Um einen Linux-Kernel zu einem Realtime-Kernel zu machen, wird ein Patch durchgeführt. Diesen Patch kann man ebenfalls von www.kernel.org herunterladen. Ein Patch gehört immer zu einem bestimmten Kernel, so dass die Nummern von Kernel und Patch übereinstimmen müssen. Der Patch wird typischerweise unterhalb des Basisverzeichnisses des Kernels gespeichert.

wget http://www.kernel.org/pub/linux/kernel/projects/rt/patch-2.6.23.1-rt11.bz2
tar xfj linux-2.6.23.1.tar.bz2
cd linux-2.6.23.1
bzcat ../patch-2.6.23.1-rt11.bz2 | patch -p1

Entfernen eines Kernels

Nehmen wir an, Sie haben einen Kernel der Version 3.3.2 erstellt, können Sie diesen mit den folgenden Befehlen wieder vom System herunterholen.
rm /boot/*-3.3.2
rm -rf /lib/modules/3.3.2/
update-grub
Durch den Aufruf von update-grub wird dafür gesorgt, dass der Kernel nicht mehr im Bootmenü erscheint.

Homepage (C) Copyright 2014, 2015 Arnold Willemer