Kernelbau
Hier wird erklärt, wie man sich einen Linux-Kernel selbst kompilieren kann. Die korrekte Kompilierung des Kernels kann nur mit einem gcc der Version < 4.9 Version funktionieren. Auch die offiziellen Linux-Kernel werden mit Version < 4.9 kompiliert (siehe Torvalds "Ok, so I’m looking at the code generation and your compiler is pure and utter shit.")
Einrichten der Entwicklungsumgebung
Dieser Schritt erfolgt nur einmal zu Anfang des Kernel-Baus. Kompiliert wird im Terminal, was auch per SSH möglich ist.
Folgende Pakete müssen, mit Hilfe dieses Befehls, geholt und installiert werden: apt-get install kernel-package libncurses5-dev fakeroot
Eventuell sind weitere Pakete nötig. apt-get zeigt das an.
Laden des Kernel-Codes
Es sollte immer der aktuelleste Kernel-Code des zur Zeit laufenden Kernels verwendet werden, es sei denn es soll ein alter Kernel kompiliert werden.
Der Benutzer root begibt sich, nach /usr/src und lädt dort den Code. Das ist Standard, weil auch DKMS & Co dort arbeiten.
Der Code des Kernels wird mit folgendem Befehl geholt: apt-get source linux
Hierbei wird nicht nur der Code geladen, sondern auch die benötigten Patches, die von der Distribution (Debian, Ubuntu, ...) hinzugefügt wurden.
Vorbereitung des Quellcodes zum Kompilieren
Falls es Fehlermeldungen wegen fehlender Pakte gibt, müssen die nachinstalliert werden.
Die Vorbereitung des Codes zum Kompilieren erfolgt mit diesem Befehl: apt-get build-dep linux
Kernel-Konfiguration
Als Ausgangspunkt sollte man immer von der aktuellen Konfiguration des gerade laufenden Kernel ausgehen. Das erpart die mühsame Einstellung von tausenden Optionen, die nur ein Spezialist alle kennt. Die Konfiguration des aktuellen Kernel befindet sich im boot-Verzeichnis unter /boot/config...<Kernel-Version>
Diese Datei kopiert man in das Verzeichnis mit dem Kernelcode /usr/src/linux...<Kernel-Version> (zB /usr/src/linux/linux-3.13.0) und benennt sie in ".config" um. Eine (optionale) gleichnamige Datei wird in ".config.old" umbenannt.
Jetzt startet man als root das Konfigurationsprogramm des Kernel, dass viele Seiten mit Kerneloptionen anbietet. Das geht mit diesem Befehl: make menuconfig
Hier hat man die Qual der Wahl und man kann sehr viel falsch machen. Daher ist es wichtig eine fertige, lauffähige Konfiguration zu benutzen.
Am Schluss speichert man die Änderungen ab, die in die .config geschrieben werden.
Makefile-Konfiguration
Dann werden im Makefile folgende Zeilen verändert:
EXTRAVERSION = [irgendwas]
wird zu
EXTRAVERSION = -eigenerVersionsname
Das kann jeder für sich entscheiden.
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
wird zu
HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 -march=native -mtune=native
und
HOSTCXXFLAGS = -O2
wird zu
HOSTCXXFLAGS = -O2 -march=native -mtune=native
Damit der Kernel explizit für die CPU kompiliert wird und die besten Optimierungen nutzt.
Kompilieren des Kernels
Vor jeder Kompilierung sollte immer aufgeräumt werden, das geht mit diesem Befehl: make clean
Jetzt geht's los: make deb-pkg
Mit make -j deb-pkg
werden die Prozesse nicht limitiert (System kann abstürzen). Man kann aber auch mit make --jobs=[ANZAHL]
die Anzahl der Prozesse selbst bestimmen.
root kann jetzt in Ruhe Kaffee trinken gehen. Der Computer ist für eine Weile beschäftigt. Erzeugt werden Deb-Pakete, die sich später leicht installieren und archivieren lassen.
Installation des Kernel
Installiert wird der neue Kernel im selben Verzeichnis mit: dpkg -i *.deb
Dann neu booten (Grub -> Advanced Options) und dann den eigenen Kernel auswählen.
Mit dem Befehl: uname -a
kann getestet werden welcher Kernel aktuell läuft.