Website-Icon .: blog cscholz.io :.

Linux: Kernel compilieren

Bevor wir anfangen uns mit dem Kernel zu beschäftigen, sollte kurz geprüft werden ob die notwendigen Tools dafür auch alle installiert sind.

apt-get install kernel-package ncurses-dev fakeroot wget bzip2 initramfs-tools gcc-4.9-plugin-dev

1. Kernel sources herunterladen

Als erstes läd man sich die gewünschten kernel sources unter http://kernel.org/ herunter. Im folgenden Beispiel habe ich mich für den Kernel 2.6.32.4 entscheiden. Diese sollten anschließend unter /usr/src abgelegt und entpackt werden.

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

In einigen Büchern ist zu lesen, dass das Verzeichniss /usr/src/linux auf den aktuellen kernel zeigt. Unter Debian ist dies von Hause aus nicht der Fall. Da ich den Konzept aber gut finde, lege ich diesen Link immer mit an.

ln -s /usr/src/linux-2.6.32.4 /usr/src/linux
cd /usr/src/linux

2.Kernel Konfiguration erstellen

Jeder Kernel hat eine .config Datei die alle Informationen darüber enthält was im Kernel aktiviert wird und was nicht. Für das compilieren eines neunen Kernels muss diese Datei erst erstellt werden. Dazu gibt es zwei Möglichkeiten.

Entweder man legt händisch fest, welche Optionen aktiviert werden – was ziemlich viele Fragen nach sich zieht 😉 oder man nutzt als Grundlage für die .config Datei die Konfiguration des aktuellen Kernels und lässt sich nur nach den neuen Funktionen des Kernels befragen.

Für eine komplett neue Konfiguration gibt es drei Möglichkeiten

make config

rein Textbasiert.

make menuconfig

Menüunterstützung auf der Konsole

make xconfig:

grafisch Abfrage. Setzt einen X-Server sowie die Qt-Bibliotheken vorraus.

make gconfig

gleiche wie xconfig jedoch auf Basis der Gnome Bibliotheken

Um eine Kernel Konfiguration auf Basis der aktuellen Kernel Konfig. zu erstellen gibt es den Befehl

make oldconfig

3. Aufräumen

Bevor nun der Kernel kompiliert werden kann, sollte noch auferäumt werden.

make-kpkg clean

Der Befehl löscht alle Objekt-Dateien (*.o). Ohne diesen Befehl werden lediglich alle Dateien kompiliert, die sich seid dem letzten Vorgang geändert haben.

4. Kernel kompilieren

Bevor der Kernel nun gebaut wird sollte ich noch dazu sagen, dass ich mit make-kpkg dafür entschieden habe den Kernel als Debian Archiv erstellen zu lassen. Wer eine MultiCore CPU besitzt, kann mit

export CONCURRENCY_LEVEL=3

die Anzahl der zu verarbeitenden Jobs auf 3 setzten wobei CONCURRENCY_LEVEL = Kernanzahl +1 nicht überschreiten sollte. Bei make gibt es dafür den Parameter -j.

Wird der Befehl als root ausgeführt reicht

make-kpkg --revision=custom.1.0 kernel_image

anderfalls muss fakeroot eingesetzt werden.

fakeroot make-kpkg --revision=custom.1.0 kernel_image

Nach dem absetzten des Befehls kann es etwas dauern bis der Kernel fertig kompiliert ist. Auf meiner virtuellen Maschine (Intel T7200, 2x 2 GHz, 2 GB Ram) dauert es ca. 40 Minunten.

Ist das Debian Archiv fertig, muss es noch installiert werden.

dpkg -i linux-image-2.6.32.4_custom.1.0_amd64.deb

5. Initial Ramdisk erstellen

Zu einem neuen Kernel gehört, auch eine neue initial ramdisk. Die Initial Ramdisk ist dafür verantwortlich, die Kernelmodule bereits beim booten zu verfügung zu stellen.

update-initramfs -c -k 2.6.32.4

6. Fertig

Im Prinzip wäre der neue Kernel nun einsatzbereit. An dieser Stelle sollte man vor dem Reboot noch mal überlegen, ob man nicht etwas vergessen hat, denn bleibt das System beim botten hängen, so hilft auch fallback Funktion von Grub nicht weiter. In diesem Fall muss manuell der alte Kernel im Grub Menü ausgewählt werden, was sich remote schwierig gestalten könnte 😉

Anmekrung zu Ubuntu

Ubuntu in kompiliert ist der Kernel mit Debuging Informationen kompiliert. Dies führt dazu, dass ein neuer Kernel auf der Basis der alten Konfiguration nicht 20-30 MB groß ist, sondern 200-300 MB.

Die entsprechende Zeile in der .config dafür ist

CONFIG_DEBUG_INFO

Sed leistet hier mal wieder gute Dienste.

sed 's/CONFIG_DEBUG_INFO/# CONFIG_DEBUG_INFO/' -i .config

Links

Update vom 29.11.2016

Fehler: Cannot use CONFIG_GCC_PLUGINS: your gcc installation does not support plugins, perhaps the necessary headers are missing?
Lösung: apt-get install gcc-4.9-plugin-dev

 

Die mobile Version verlassen