Linux-Kernel selbst kompilieren

Wie man den Linux-Kernel selbst kompiliert

Ich bin dazu übergegangen, meine Kernel selbst zu kompilieren, und glücklicherweise hat mein neues Computersystem (Prozessor AMD Threadripper 3990X mit 64 Kernen, 128 Threads) genug Power, um das in ein paar Minuten zu bewerkstelligen. Was kompliziert anmutet, ist eigentlich ganz einfach. Ich gebe hier eine detaillierte Anleitung, die unter Arch Linux (bzw. einem auf Arch basierenden System wie z.B. Endeavour OS, Manjaro usw.) funktioniert. Es genügt, die angegebenen Befehle im Terminal auszuführen, das Ergebnis ist ein selbst kompilierter Kernel. Der Vorteil: Man kann einen solchen Kernel genau auf die eigene Hardware abstimmen und das System entsprechend optimieren.

Den Kernel, der kompiliert werden soll, herunterladen von:
https://www.kernel.org/

Den heruntergeladenen Kernel entpacken und das entpackte Verzeichnis verschieben:

Als Kernel wird hier »linux-5.10.12« genannt. Bitte ersetzen Sie das durch die von Ihnen gewählte Version.

tar xJf linux-5.10.12.tar.xz
sudo mv linux-5.10.12 /usr/src/
cd /usr/src/linux-5.10.12

Den Kernel mit der alten Konfigurationsdatei konfigurieren:

zcat /proc/config.gz > .config
make oldconfig
(Soll die Kernel-Konfiguration verändert werden, nehmen wir anstatt »make oldconfig« den Befehl »make menuconfig«.)

Den Kernel kompilieren:

make -j128
(»-j128« bedeutet, dass der Kernel mit 128 Prozessorthreads kompiliert werden soll, was rasend schnell geht, meinem Threadripper 3990X sei’s gedankt. Bitte ersetzen Sie »128« durch Ihre Anzahl von Threads. Wenn Sie »-j128« ganz weglassen, wird für die Kompilierung nur ein Thread verwendet, und dann kann es ziemlich lange dauern.)

Den kompilierten Kernel installieren:

sudo cp arch/x86/boot/bzImage /boot/vmlinuz-linux-5.10.12
sudo make modules_install -j128

Einrichtung der Kernel-Headers:

(Die Header sind z.B. für DKMS-Module erforderlich.)

cd /usr/lib/modules/linux-5.10.12
sudo mv build build.bak
sudo mv source source.bak
sudo mkdir build source
sudo cp -r build.bak/* build/
sudo cp -r source.bak/* source/
sudo rm build.bak
sudo rm source.bak

Generieren des Initramfs:

sudo mkinitcpio -k linux-5.10.12 -g /boot/initramfs-linux-5.10.12.img

Aufräumen:

cd /usr/src/linux-5.10.12/
make clean

Aktualisierung des Grub-Bootloaders (wir wollen ja vom neuen Kernel starten können):

sudo grub-mkconfig -o /boot/grub/grub.cfg

Hier am besten einen Neustart durchführen. Anschließend installieren wir die DKMS-Module für den neuen Kernel und löschen die des alten.

Installieren der Module für den neuen Kernel, am einfachsten mit:

sudo dkms autoinstall

Wenn die Module einzeln installiert werden sollen:

sudo dkms status
(Gibt Auskunft über die verwendeten DKMS-Module.)

Wenn z.B. Vmware-Workstation installiert ist:

sudo dkms install vmware-workstation/(vmware-workstation-version) (kernel-version)

Beispiel:

sudo dkms install vmware-workstation/16.1.0_17198959 5.10.12

DKMS-Module von altem Kernel deinstallieren:
Wie oben bei der Installation, nur nehmen wir »remove« anstatt »install« und nennen natürlich die alte Kernel-Version.

Es empfiehlt sich ein weiterer Neustart, nach dem wir das System noch ein bisschen aufräumen können, indem wir den alten Kernel entfernen:

Löschen Sie in »/usr/src/(kernel)« den alten Kernel, wodurch Sie etwa 16-17 Gigabyte an Speicherplatz sparen. Noch einmal so viel räumen Sie frei, wenn Sie auch das Source-Verzeichnis des neuen Kernels löschen, und zwar hier: »/usr/lib/modules/(neuer Kernel/source«.

Falls die frühere Kernel-Version nicht im Auswahlmenü des Bootloaders erscheinen soll, können Sie unter »/boot« das entsprechende Kernelimage löschen. Nicht vergessen, den Bootloader Grub zu aktualisieren mit »sudo grub-mkconfig -o /boot/grub/grub.cfg«.

Voilà, alles erledigt.

4 Kommentare

  • Thomas

    Vor ca. 20 Jahren habe ich das auch noch gemacht, weil die Hardwareressourcen knapp waren und man um jedes MB RAM kämpfen musste oder unbedingt Modul XY im Kernel brauchte und nicht nachladen wollte. Das spielt aber schon lange keine Rolle mehr. Generell würde ich immer empfehlen den kompilierten Kernel aus den jeweiligen Repositories der Distributionen zu nehmen, allein schon wegen der Sicherheitsupdates.
    Aber prinzipiell finde ich solche Beiträge natürlich dufte 😉

    Einen der besten Sätze fand ich immer beim kernelmenue: “If you don’t know it you don’t need it”

    • Stimmt schon, das eigene Kompilieren ist heute längst nicht mehr nötig, und vielleicht war es das nie. 🙂 Aber es ist doch nicht schlecht zu wissen, wie es geht. Mir macht es Spaß, unter die “Motorhaube” von Linux zu blicken und zu verstehen, warum was wie funktioniert. Das ist das Wunderbare an Linux: Man *kann* unter die Motorhaube blicken und dort etwas verändern, wenn man möchte. Bei Windows geht so etwas nicht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.