Eigener (Custom-)Kernel mit Debian 9 Stretch Linux

Einführung

Reicht der Kernel, der mit der Distribution mitgeliefert wird, nicht aus, erzeugt man sich einen eigenen.

Die Methode mit kernel-package ist - ohne Einbindung von Unstable - bei Stretch hinfällig. Aufgrund von Bugs, welche nicht rechtzeitig behoben wurde, wurde entschieden das Package kernel-package nicht ins Repository aufzunehmen.

Von Debian angepasste Sourcen holt man sich mit apt-get. Die Original-Sourcen erhält man auf kernel.org. Optional liest man sich das Thema Kernel-Signatur durch.
Eine oft genutzte Methode findet sich im Debian Linux Kernel Handbook. Weitere Anleitungen finden sich oftmals auf Hilfeseiten zu den jeweiligen Distributionen.

Schritt für Schritt

Als erstes als root alle erforderlichen Packages installieren

# apt-get install build-essential fakeroot
# apt-get build-dep linux

Bei Nutzung der Sourcen aus dem Debian-Repository die aktuellen Sourcen downloaden und ins Sourcen-Verzeichnis wechseln

# apt-get source linux
# cd linux-4.12.65

Sollen alternativ die nicht von Debian veränderten Sourcen von kernel.org benutzt werden, entpackt man diese und wechselt ins Sourcen-Verzeichnis

# tar -xJf linux-4.15.tar.xz
# cd linux-4.15

Optional wird eine bestehende Konfigurationsdatei ins Sourcen-Verzeichnis kopiert

# cp /boot/config-4.9.0-5-amd64 .config

Um die alte Konfigurationsdatei an alle neu hinzugekommenen Kernel-Optionen anzupassen, läßt man sich diese neuen Kernel-Optionen anzeigen und mit der gewünschten Auswahl versehen.

# make oldconfig

Ein reines ENTER wählt die Default-Auswahl.

Für nconfig wird ncurses installiert

# apt-get install libncurses5-dev

Mit nconfig lassen sich danach bei Bedarf die Kernel-Optionen einfacher anpassen

# make nconfig

Mit F6 speichern und mit F9 beenden.

Die meisten Nutzer werden den Kernel nicht debuggen, somit lässt sich Speicherplatz und Zeit einsparen, indem das Debug-Package nicht erstellt wird

# scripts/config --disable DEBUG_INFO

Nun kann der Kernel erzeugt werden

# make clean
# make deb-pkg

Zur parallelen Nutzung mehrerer CPU-Cores/-Kerne den Parameter -X verwenden (X steht für die Anzahl der Cores + 1; somit bei Dual-Core -j3, bei Quad-Core -j5, ...)

# make clean
# make -j3 deb-pkg

Mit einem vorangestellten time läßt sich die Kompilierungszeit verschiedener Systeme testen.

# make clean
# time make -j3 deb-pkg

Abschließend das gebaute Kernel-Image installieren und den PC neustarten.

# dpkg -i linux-image-4.15.0_4.15.0-10.00.Custom_amd64.deb

Alternativ zur Installation aller generierten Kernel-Debs

# dpkg -i *.deb

Kernel-Änderungen

Beim Update von 4.12.5 auf 4.15 fielen mir u.a. folgende Optionen auf: CPU isolation, Huawei devices, USB Type-C Support

Hinweise

Kernel-Version eruieren

Die aktuell genutzte Kernel-Version lässt sich mit uname -a herausfinden

# uname -a
Linux debiansystem 4.12.7 #1 SMP Wed Aug 22 20:50:03 CEST 2017 x86_64 GNU/Linux

.config neu erstellen

Sollte man keine config haben, lässt sich eine neue erzeugen. Damit fällt jedoch die von Debian-Maintainern getroffene Default-Auswahl weg und es wird die der Kernel-Maintainer genommen. Entweder erzeugt man eine durch Aufruf von make menuconfig und anschließendem Speichern (Save) oder durch automatische Auswahl der empfohlenen Einstellungen mit yes "" | make oldconfig:

# make menuconfig

oder

# yes "" | make oldconfig

BumbleBee / NVidia

Nach einem Kernel-Update wird man eventuell Kernelmodule neu erstellen müssen, falls der Package-Manager diesen Vorgang nicht von selbst startet. Bei Nutzung eines NVidia-DKMS-Moduls bei z.B. BumbleBee stößt man - vorausgesetzt DKMS-Sourcen-Package nvidia-kernel-dkms ist installiert - den Bau der NVidia-DKMS-Module neu an. Als root

# dpkg-reconfigure nvidia-kernel-dkms

Es werden jedoch nur Kernel unterstützt zu denen die DKMS-Sourcen kompatibel sind. Bei den anderen wird mit einer Fehlermeldung abgebrochen. Somit primär für Kernel nützlich, die auch im Repository angeboten werden. Bei Nutzung eines Kernels ohne passendes DKMS-Modul wird bei Aufruf von optirun die Fehlermeldung Cannot access secondary GPU - error: Could not load GPU driver aufgerufen, weil kein passender binärer Treiber kompiliert und geladen werden konnte.