GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Wie man einen Kernel kompiliert – Der Debian-Weg

Auf dieser Seite

  1. 1 Vorbemerkung
  2. 2 Erstellen eines Kernel-.deb-Pakets
    1. 2.1 Erforderliche Pakete für die Kernel-Kompilierung installieren
    2. 2.2 Laden Sie die Kernelquellen herunter
    3. 2.3 Patches auf die Kernelquellen anwenden (optional)
    4. 2.4 Den Kernel konfigurieren
    5. 2.5 Erstellen Sie den Kernel
    6. 2.6 Den neuen Kernel installieren
  • 3 Erstellen eines Kernels auf traditionelle Weise
    1. 3.1 Erforderliche Pakete für die Kernel-Kompilierung installieren
    2. 3.2 Laden Sie die Kernelquellen herunter
    3. 3.3 Patches auf die Kernelquellen anwenden (optional)
    4. 3.4 Den Kernel konfigurieren
    5. 3.5 Erstellen und Installieren des Kernels
    6. 3.6 Schritte nach der Installation
  • 4 Links
  • Jede Distribution verfügt über einige spezifische Tools zum Erstellen eines benutzerdefinierten Kernels aus den Quellen. In diesem Artikel geht es um das Kompilieren eines Kernels auf einem Debian (Etch)-System. Es beschreibt, wie Sie einen benutzerdefinierten Kernel unter Verwendung der neuesten unveränderten Kernel-Quellen von www.kernel.org (Vanilla-Kernel) erstellen, sodass Sie unabhängig von den von Ihrer Distribution bereitgestellten Kerneln sind. Es zeigt auch, wie die Kernel-Quellen gepatcht werden, wenn Sie Funktionen benötigen, die dort nicht enthalten sind.

    Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!

    1 Vorbemerkung

    Ich werde zwei Möglichkeiten beschreiben, einen neuen Kernel zu kompilieren. Bei der ersten Methode erhalten Sie ein Kernel-.deb-Paket, das auf dem System installiert werden kann und das Sie mit anderen teilen und auf anderen Debian Etch-Systemen installieren können.

    Die zweite Methode besteht darin, einen Kernel auf "traditionelle" Weise zu kompilieren. Dieser Weg funktioniert auf jeder Linux-Distribution, aber natürlich erhalten Sie am Ende kein Kernel-.deb-Paket.

    2 Erstellen eines .deb-Kernelpakets

    Dieses Kapitel zeigt, wie man einen Kernel baut und am Ende ein .deb-Paket hat, das man installieren und mit anderen teilen kann.

    2.1 Erforderliche Pakete für die Kernel-Kompilierung installieren

    Zuerst aktualisieren wir unsere Paketdatenbank:

    apt-get update

    Dann installieren wir alle benötigten Pakete wie folgt:

    apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

    2.2 Laden Sie die Kernelquellen herunter

    Als nächstes laden wir unseren gewünschten Kernel nach /usr/src herunter. Gehen Sie zu www.kernel.org und wählen Sie den Kernel aus, den Sie installieren möchten, z. linux-2.6.21.3.tar.bz2 (Sie finden alle 2.6-Kernel hier:http://www.kernel.org/pub/linux/kernel/v2.6/). Dann können Sie es wie folgt nach /usr/src herunterladen:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Dann entpacken wir die Kernelquellen und erstellen einen Symlink Linux zum Kernelquellenverzeichnis:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    2.3 Anwenden von Patches auf die Kernelquellen (optional)

    Manchmal benötigen Sie Treiber für Hardware, die standardmäßig nicht vom neuen Kernel unterstützt wird, oder Sie benötigen Unterstützung für Virtualisierungstechniken oder eine andere hochmoderne Technologie, die es noch nicht in den Kernel geschafft hat. In all diesen Fällen müssen Sie die Kernel-Quellen patchen (sofern ein Patch verfügbar ist...).

    Nehmen wir nun an, Sie haben den benötigten Patch (ich nenne ihn in diesem Beispiel patch.bz2) nach /usr/src heruntergeladen. So wenden Sie es auf Ihre Kernel-Quellen an (Sie müssen sich immer noch im /usr/src/linux-Verzeichnis befinden):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    Der erste Befehl ist nur ein Test, er ändert nichts an Ihren Quellen. Wenn keine Fehler angezeigt werden, können Sie den zweiten Befehl ausführen, der den Patch tatsächlich anwendet. Tun Sie es nicht, wenn der erste Befehl Fehler anzeigt!

    Sie können auch Kernel-Prepatches auf Ihre Kernel-Quellen anwenden. Wenn Sie beispielsweise eine Funktion benötigen, die nur in Kernel 2.6.22-rc3 verfügbar ist, aber die vollständigen Quellen für diesen Kernel noch nicht veröffentlicht wurden. Stattdessen ist ein Patch-2.6.22-rc3.bz2 verfügbar. Sie können diesen Patch auf die 2.6.21-Kernelquellen anwenden, aber nicht auf Kernel 2.6.21.1 oder 2.6.21.2 usw. Dies wird auf http://kernel.org/patchtypes/pre.html erklärt:

    Prepatches sind das Äquivalent zu Alpha-Versionen für Linux; sie leben in den Testverzeichnissen in den Archiven. Sie sollten mit dem Dienstprogramm patch(1) auf den Quellcode der vorherigen Vollversion mit einer dreiteiligen Versionsnummer angewendet werden (zum Beispiel sollte der 2.6.12-rc4-Prepatch auf die 2.6.11-Kernelquellen angewendet werden, nicht , zum Beispiel 2.6.11.10.)

    Wenn Sie also einen 2.6.22-rc3-Kernel kompilieren möchten, müssen Sie die 2.6.21-Kernelquellen herunterladen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) in Schritt 3 statt Kernel 2.6.21.3!

    So wenden Sie den 2.6.22-rc3-Patch auf Kernel 2.6.21 an:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    2.4 Den Kernel konfigurieren

    Es ist eine gute Idee, die Konfiguration Ihres aktuell funktionierenden Kernels als Grundlage für Ihren neuen Kernel zu verwenden. Dazu kopieren wir die bestehende Konfiguration nach /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Dann laufen wir

    make menuconfig

    wodurch das Kernel-Konfigurationsmenü aufgerufen wird. Gehen Sie zu Load an Alternate Configuration File und wählen Sie .config (das die Konfiguration Ihres aktuell funktionierenden Kernels enthält) als Konfigurationsdatei:

    Blättern Sie dann durch das Kernel-Konfigurationsmenü und treffen Sie Ihre Auswahl. Wenn Sie fertig sind und Beenden wählen, beantworten Sie die folgende Frage (Möchten Sie Ihre neue Kernelkonfiguration speichern?) mit Ja:

    2.5 Erstellen Sie den Kernel

    Um den Kernel zu bauen, führen Sie diese beiden Befehle aus:

    make-kpkg clean
    fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

    Nach --append-to-version=können Sie einen beliebigen String schreiben, der Ihnen hilft, den Kernel zu identifizieren, aber er muss mit einem Minuszeichen (-) beginnen und darf keine Leerzeichen enthalten.

    Seien Sie nun geduldig, die Kernel-Kompilierung kann einige Stunden dauern, abhängig von Ihrer Kernel-Konfiguration und Ihrer Prozessorgeschwindigkeit.

    2.6 Installieren Sie den neuen Kernel

    Nach dem erfolgreichen Kernel-Build finden Sie zwei .deb-Pakete im /usr/src-Verzeichnis.

    cd /usr/src
    ls -l

    Auf meinem Testsystem hießen sie linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb (das den eigentlichen Kernel enthält) und linux-headers-2.6.21.3-custom_2.6.21.3- custom-10.00.Custom_i386.deb (enthält Dateien, die benötigt werden, wenn Sie später zusätzliche Kernel-Module kompilieren möchten). Ich installiere sie wie folgt:

    dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb
    dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

    (Sie können die beiden .deb-Dateien jetzt sogar auf andere Debian-Etch-Systeme übertragen und dort genauso installieren, was bedeutet, dass Sie den Kernel dort nicht erneut kompilieren müssen.)

    Das ist es. Die GRUB-Bootloader-Konfigurationsdatei /boot/grub/menu.lst wurde automatisch modifiziert, und eine Ramdisk für den neuen Kernel wurde in /boot erstellt.

    Starten Sie nun das System neu:

    shutdown -r now

    Wählen Sie am Boot-Prompt Ihren neuen Kernel aus (sollte standardmäßig ausgewählt sein):

    Wenn alles gut geht, sollte es mit dem neuen Kernel kommen. Sie können überprüfen, ob es wirklich Ihren neuen Kernel verwendet, indem Sie

    ausführen
    uname -r

    Dies sollte so etwas wie

    anzeigen
    2.6.21.3-custom

    Wenn das System nicht startet, starten Sie es neu und wählen Sie am Boot-Prompt Ihren alten Kernel aus. Sie können jetzt erneut versuchen, einen funktionierenden Kernel zu kompilieren. Vergessen Sie nicht, die Zeilen des nicht funktionierenden Kernels aus /boot/grub/menu.lst zu entfernen.

    3 Erstellung eines Kernels auf traditionelle Weise

    Dieses Kapitel beschreibt einen anderen Ansatz, der auf jedem Linux-System verwendet werden kann (abgesehen von Details wie dem Erstellen einer Ramdisk oder dem Aktualisieren des Bootloaders). Natürlich werden Sie am Ende kein Kernel-.deb-Paket haben.

    3.1 Erforderliche Pakete für die Kernel-Kompilierung installieren

    Zuerst aktualisieren wir unsere Paketdatenbank:

    apt-get update

    Dann installieren wir alle benötigten Pakete wie folgt:

    apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

    3.2 Laden Sie die Kernelquellen herunter

    Als nächstes laden wir unseren gewünschten Kernel nach /usr/src herunter. Gehen Sie zu www.kernel.org und wählen Sie den Kernel aus, den Sie installieren möchten, z. linux-2.6.21.3.tar.bz2 (Sie finden alle 2.6-Kernel hier:http://www.kernel.org/pub/linux/kernel/v2.6/). Dann können Sie es wie folgt nach /usr/src herunterladen:

    cd /usr/src
    wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

    Dann entpacken wir die Kernelquellen und erstellen einen Symlink Linux zum Kernelquellenverzeichnis:

    tar xjf linux-2.6.21.3.tar.bz2
    ln -s linux-2.6.21.3 linux
    cd /usr/src/linux

    3.3 Anwenden von Patches auf die Kernelquellen (optional)

    Manchmal benötigen Sie Treiber für Hardware, die standardmäßig nicht vom neuen Kernel unterstützt wird, oder Sie benötigen Unterstützung für Virtualisierungstechniken oder eine andere hochmoderne Technologie, die es noch nicht in den Kernel geschafft hat. In all diesen Fällen müssen Sie die Kernel-Quellen patchen (sofern ein Patch verfügbar ist...).

    Nehmen wir nun an, Sie haben den benötigten Patch (ich nenne ihn in diesem Beispiel patch.bz2) nach /usr/src heruntergeladen. So wenden Sie es auf Ihre Kernel-Quellen an (Sie müssen sich immer noch im /usr/src/linux-Verzeichnis befinden):

    bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch.bz2 | patch -p1

    Der erste Befehl ist nur ein Test, er ändert nichts an Ihren Quellen. Wenn keine Fehler angezeigt werden, können Sie den zweiten Befehl ausführen, der den Patch tatsächlich anwendet. Tun Sie es nicht, wenn der erste Befehl Fehler anzeigt!

    Sie können auch Kernel-Prepatches auf Ihre Kernel-Quellen anwenden. Wenn Sie beispielsweise eine Funktion benötigen, die nur in Kernel 2.6.22-rc3 verfügbar ist, aber die vollständigen Quellen für diesen Kernel noch nicht veröffentlicht wurden. Stattdessen ist ein Patch-2.6.22-rc3.bz2 verfügbar. Sie können diesen Patch auf die 2.6.21-Kernelquellen anwenden, aber nicht auf Kernel 2.6.21.1 oder 2.6.21.2 usw. Dies wird auf http://kernel.org/patchtypes/pre.html erklärt:

    Prepatches sind das Äquivalent zu Alpha-Releases für Linux; sie leben in den Testverzeichnissen in den Archiven. Sie sollten mit dem Dienstprogramm patch(1) auf den Quellcode der vorherigen Vollversion mit einer dreiteiligen Versionsnummer angewendet werden (zum Beispiel sollte der 2.6.12-rc4-Prepatch auf die 2.6.11-Kernelquellen angewendet werden, nicht , zum Beispiel 2.6.11.10.)

    Wenn Sie also einen 2.6.22-rc3-Kernel kompilieren möchten, müssen Sie die 2.6.21-Kernelquellen herunterladen (http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21. tar.bz2) in Schritt 3 statt Kernel 2.6.21.3!

    So wenden Sie den 2.6.22-rc3-Patch auf Kernel 2.6.21 an:

    cd /usr/src 
    wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2
    cd /usr/src/linux
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run
    bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

    3.4 Den Kernel konfigurieren

    Es ist eine gute Idee, die Konfiguration Ihres aktuell funktionierenden Kernels als Grundlage für Ihren neuen Kernel zu verwenden. Dazu kopieren wir die bestehende Konfiguration nach /usr/src/linux:

    make clean && make mrproper
    cp /boot/config-`uname -r` ./.config

    Dann laufen wir

    make menuconfig

    wodurch das Kernel-Konfigurationsmenü aufgerufen wird. Gehen Sie zu Load an Alternate Configuration File und wählen Sie .config (das die Konfiguration Ihres aktuell funktionierenden Kernels enthält) als Konfigurationsdatei:

    Blättern Sie dann durch das Kernel-Konfigurationsmenü und treffen Sie Ihre Auswahl. Wenn Sie fertig sind und Beenden wählen, beantworten Sie die folgende Frage (Möchten Sie Ihre neue Kernelkonfiguration speichern?) mit Ja:

    3.5 Den Kernel erstellen und installieren

    Um den Kernel zu bauen, führen Sie diese Befehle aus:

    make all
    make modules_install
    make install

    Seien Sie nun geduldig, die Kernel-Kompilierung kann einige Stunden dauern, abhängig von Ihrer Kernel-Konfiguration und Ihrer Prozessorgeschwindigkeit.

    3.6 Schritte nach der Installation

    Der neue Kernel ist jetzt installiert, aber wir brauchen noch eine Ramdisk für unseren neuen Kernel (sonst bootet das System höchstwahrscheinlich nicht!) und wir müssen dem GRUB-Bootloader unseren neuen Kernel mitteilen.

    Zuerst machen wir das:

    depmod 2.6.21.3
    apt-get install yaird

    Dann erstellen wir eine Ramdisk mit folgendem Befehl:

    mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

    Die GRUB-Konfiguration ist auf Debian Etch sehr einfach. Alles, was wir tun müssen, ist laufen

    update-grub

    Dies erkennt den neuen Kernel und die Ramdisk und aktualisiert /boot/grub/menu.lst für uns.

    Starten Sie nun das System neu:

    shutdown -r now

    Wählen Sie am Boot-Prompt Ihren neuen Kernel aus (sollte standardmäßig ausgewählt sein). Wenn alles gut geht, sollte es mit dem neuen Kernel kommen. Sie können überprüfen, ob es wirklich Ihren neuen Kernel verwendet, indem Sie

    ausführen
    uname -r

    Dies sollte so etwas wie

    anzeigen
    2.6.21.3

    Wenn das System nicht startet, starten Sie es neu und wählen Sie Ihren alten Kernel am Boot-Prompt aus. Sie können jetzt erneut versuchen, einen funktionierenden Kernel zu kompilieren. Vergessen Sie nicht, die Zeilen des nicht funktionierenden Kernels aus /boot/grub/menu.lst zu entfernen.

    • Debian:http://www.debian.org
    • Das Linux-Kernel-Archiv:http://www.kernel.org

    Debian
    1. Wie man einen Linux-Kernel im 21. Jahrhundert kompiliert

    2. Erstellen von Linux-Kernels auf Debian-Art

    3. So ändern Sie das Profilbild in Debian 10

    4. Der beste Weg, einen Kernel für einen I7-Prozessor zu kompilieren?

    5. Wie überprüfe ich HZ im Terminal?

    So installieren Sie die Winamp-Alternative Qmmp unter Debian 10

    So ändern Sie den Hostnamen in Debian 10

    So bearbeiten Sie die Hosts-Datei unter Debian

    So installieren Sie den neuesten Kernel auf Debian 11 und Derivaten

    So installieren Sie das neueste MySQL 8 auf Debian 11

    So installieren Sie den Linux-Kernel 5.15 unter Debian 11