Howto/Kernel kompilieren

Hinweis:

Dieses Howto wurde von verdooft erstellt. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich gegebenenfalls zusätzlich an den/die Verfasser des Howtos.

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Ein Terminal öffnen

  2. ⚓︎ Allgemeine Informationen zum Kernel

  3. ⚓︎ Installation von Programmen

  4. ⚓︎ Dateien mit wget herunterladen

  5. ⚓︎ Überprüfen von Signaturen per GnuPG

  6. ⚓︎ Tar-Archive entpacken

  7. ⚓︎ Umgang mit make, optional

  8. ⚓︎ Debian-Pakete installieren

  9. ⚓︎ Kernelinformationen ermitteln

  10. ⚓︎ Im Terminal mit Root-Rechten arbeiten

  11. ⚓︎ Umgang mit dem C-Compiler GCC

Problembeschreibung

In manchen Fällen reicht es, bei kernelbezogenen Problemen (etwa sehr moderner oder exotischer Hardware), den aktuellen Mainline-Kernel zu verwenden. Benötigt man einen angepassten Kernel, etwa um einen Bug zu beheben, oder die Kompatibilität zu Hardwarekomponenten im Source zu verbessern, oder Optionen zu ändern, kann es sinnvoll sein, diesen aus dem Quellcode selbst zu bauen. Manchmal reicht es schon, wenn man neugierig ist, um sich dafür zu entscheiden. Verwendet man sehr alte Hardware, könnte es sein, dass der neue Kernel diese nicht mehr unterstützt.

In diesem Howto wird ausschließlich auf das Kompilieren des Quellcodes von kernel.org eingegangen, es ist aber möglich, dass Teile der Anleitung auch in anderen Szenarien anwendbar sind. Zu beachten ist, dass es mit sehr aktuellen Kernelversionen zu Problemen beim Kompilieren, auch per DKMS, von bestimmten Modulen kommen kann. Es wird empfohlen, den vorherigen Kernel nicht zu deinstallieren, damit mindestens ein Alternativkernel zur Verfügung steht.

Das Kompilieren, inklusive Bauen der Pakete, kann - je nach verwendeter CPU, in deutlich unter einer halben Stunde abgeschlossen sein, aber auch bis zu mehreren Stunden dauern (4 Stunden auf einem älteren, mobilen Core 2 Duo System).

Geht man dieses HowTo per SSH auf einem entfernten Rechner durch, ist es empfehlenswert, das in einer Screen- oder Tmux-Sitzung zu erledigen, damit der Vorgang bei einem Verbindungabbruch nicht unterbrochen wird.

Anleitung

Installation der Voraussetzungen

Befehl zum Installieren der Pakete:

sudo apt-get install build-essential libncurses5 libncurses5-dev libncurses-dev qtbase5-dev-tools flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf debhelper rustc bc 

Oder mit apturl installieren, Link: apt://build-essential,libncurses5,libncurses5-dev,libncurses-dev,qtbase5-dev-tools,flex,bison,openssl,libssl-dev,dkms,libelf-dev,libudev-dev,libpci-dev,libiberty-dev,autoconf,debhelper,rustc,bc

Sonstige Vorbereitungen

Überprüfung der Signatur

Entpacken des Archives

Aufräumen des Quelltextverzeichnisses

Konfiguration kopieren

Konfigurationsänderungen

Kompilieren

Um den Vorgang des Kompilierens zu beschleunigen, kann man den Kernel mit mehreren Threads bauen.

Installation und Überprüfung der Installation

Deinstallation

sudo apt purge linux-image-6.6.4-custombuild-001 linux-headers-6.6.4-custombuild-001 

Dabei bleibt das Paket linux-libc-dev unberührt, es sollte keine negativen Auswirkungen haben.

Erhält man während der Deinstallation eine Meldung der Art:

dpkg: Warnung: Während Entfernens von linux-image-6.6.4-custombuild-001 ist Verzeichnis »/lib/modules/6.6.4-custombuild-001« nicht leer, wird daher nicht gelöscht

kann man das Verzeichnis mitsamt des Inhaltes so entfernen:

sudo rm -R /lib/modules/6.6.4-custombuild-001 

Weiterführende Optionen

Installation von gcc und g++ Version 13

Möchte man den Kernel mit abweichenden gcc/g++ Versionen bauen (hier Version 13), geht das so:

Adresszeile zum Hinzufügen des PPAs:

  • ppa:ubuntu-toolchain-r/test

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams ubuntu-toolchain-r zu entnehmen.

  • gcc-13 (PPA)

  • g++-13 (PPA)

Befehl zum Installieren der Pakete:

sudo apt-get install gcc-13 g++-13 

Oder mit apturl installieren, Link: apt://gcc-13,g++-13

make CC=/usr/bin/gcc-13 CXX=/usr/bin/g++-13 -j 16 bindeb-pkg LOCALVERSION=-"custombuild-001" 

Es kann die Abfrage erfolgen

Initialize kernel stack variables at function entry
> 1. no automatic stack variable initialization (weakest) (INIT_STACK_NONE)
  2. pattern-init everything (strongest) (INIT_STACK_ALL_PATTERN) (NEW)
  3. zero-init everything (strongest and safest) (INIT_STACK_ALL_ZERO) (NEW)
choice[1-3?]:

In dieser Anleitung wurde Option 1 gewählt.

Installation eines aktuelleren Rust-Compilers

Adresszeile zum Hinzufügen des PPAs:

  • ppa:savoury1/rust

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams savoury1 zu entnehmen.

  • rustc (PPA)

Befehl zum Installieren der Pakete:

sudo apt-get install rustc 

Oder mit apturl installieren, Link: apt://rustc