May 3, 2021

Testkernel kompilieren

Ich habe vor einiger Zeit angefangen gelegentlich meinen eigenen Linuxkernel zu kompilieren. So kann ich der Kernelentwicklung folgen und nach Regressionen ausschau halten. Den Kernel selbst zu kompilieren und zu testen ist quasi die einfachste Art und Weise einen bescheidenen Beitrag zur Linuxkernelentwicklung zu leisten. Vorausgesetzt man berichtet wenn man plötzlich Probleme haben sollte.

Ich habe extra ein Subordner für den Kernel erstellt. Warum wird am Ende klar:

mkdir kernel
cd kernel

Danach kann man Linus Kernelbranch herunterladen mit:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux

Unter Ubuntu braucht es die folgenden Abhängigkeiten.

sudo apt-get install git build-essential kernel-package fakeroot libncurses5-dev libssl-dev ccache bison flex

Um einen Kernel zu bauen braucht man eine config Datei. Die aktuell verwendete ist grundsätzlich keine schlechte Idee.

cp /boot/config-$(uname -r) .config

Jede Kernelversion bringt Änderungen zur Konfiguration mit sich. Mit olddefconfig kann man die neuen Sachen auf default setzen. Das sollte sicher sein.

make olddefconfig

Für den kernel geht das gute alte (Linus will es so) make und make install. Ich persönlich versuche aber möglichst wenig an meinem Paketmanager vorbei zu installieren. Auf lange Sicht macht das nur Stress. Zum Glück ist es beim Kernel super einfach ein .deb Paket zu bauen:

make -j 10 bindeb-pkg

-j 10 bedeutet, dass ich mit 10 threads Kompiliere, was für meinen 8 Kern Prozessor okay ist. Je nachdem was du hast, nimm mehr oder weniger Anzahl der Kerne + 2 geht meistens gut.

bindeb-pkg sorgt dafür, dass wir installierbare .deb Pakete bekommen. Es gibt auch die Option deb-pkg aber bei allen von mir getesteten Systemen ist deb-pkg kaputt. bindeb-pkg hat hingegen immer funktioniert. Das Ergebnis von obigem make sind dann 4 .deb Dateien. Allerdings landen diese Dateien eine Ordner ebene höher. Darum auch der Initiale kernel Ordner im ersten Befehl. ls .. zeigt jetzt also u.a.:

linux-headers-X_X-Y_amd64.deb
linux-image-X_X-Y_amd64.deb
linux-image-X-dbg_X-Y_amd64.deb
linux-libc-dev-X-Y_amd64.deb

X und Y sind hierbei spezifische versionsnummern. X ergibt sich aus der Kernelversionsnummer und Y ist eine Buildnummer.

Das Ergebnis kann jetzt installiert und verwendet werden:

sudo dpkg -i linux-headers-X_X-Y_amd64.deb linux-image-X_X-Y_amd64.deb

Die libc-dev und dbg Pakete sind dabei optional und brauchen nur installiert werden, wenn es Probleme gibt. Sie dienen zum debuggen, was, wenn alles geht, ja nicht gebraucht wird.

Danach kann das System bereits neu installiert werden. Dadurch, dass wir die .deb Pakete installieren, werden auch alle dkms module aktualisiert und grub wird über die neue Version informiert. Das simple make install kümmert sich zwar auch um grub, aber dkms module sind danach oft kaputt.

Will man den neuen Kernel wieder los werden, kann man ihn mit apt wieder deinstallieren.

sudo apt remove linux-headers-X  linux-image-X

Hier natürlich aufpassen, dass man die richtige Version deinstalliert, da man ja jetzt mindestens zwei Kernel im System hat. Ich würde keinem empfehlen den Default Kernel zu deinstallieren.

Viel Spaß mit dem Setup Deisi

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Powered by Hugo & Kiss.