So kompilieren Sie Vanilla Linux -Kernel aus der Quelle auf Fedora

So kompilieren Sie Vanilla Linux -Kernel aus der Quelle auf Fedora

Der Kernel ist der wichtigste Bestandteil eines Betriebssystems: Unter den anderen Dingen unterstützt er verschiedene Arten von Hardware und verwaltet Ressourcenzuweisungen.

Linux ist ein monolithischer Kernel: Obwohl seine Funktionen statisch oder gebaut und als getrennt geladen werden können Module, Es läuft immer als „Einzelstück“ im gleichen Adressraum. In diesem Tutorial sehen wir, wie Sie einen Vanilla Linux -Kernel herunterladen, kompilieren und installieren. Die angegebenen Anweisungen sollten auf allen Linux -Verteilungen funktionieren. Dieser Leitfaden konzentriert sich jedoch auf die Zusammenstellung des Kernels auf einem Fedora -System.

In diesem Tutorial lernen Sie:

  • So konfigurieren, kompilieren und installieren Sie einen Vanilla Linux -Kernel
  • So verpacken Sie den kompilierten Kernel und seine Module


Das NCurses-basierte Konfigurationsmenü für den Linux-Kernel

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Fedora
Software
  • GCC
  • biegen
  • machen
  • Bison
  • OpenSSL-Devel
  • Elfutils-liBelf-Devel
  • NCURSSE-DEVEL (erforderlich, um das NCURSES-basierte Menü zu verwenden, um den Kernel zu konfigurieren)
  • qt-devel (erforderlich, um die grafische Schnittstelle von QT zu verwenden, um den Kernel zu konfigurieren)
  • RPM-Build (musste den Kernel im RPM-Format verpacken)
Andere Root -Berechtigungen zur Installation der erforderlichen Abhängigkeiten und des kompilierten Kernels
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Installation der Abhängigkeiten

Um den Linux -Kernel aus der Quelle kompilieren zu können, müssen wir einige Pakete in unserem System installieren:

$ sudo dnf Installation GCC Flex Make Bison OpenSSL-Devel Elfutils-liBelf-Devel


Die oben genannten sind nur die "Kernpakete", die wir brauchen. Um bestimmte Konfigurationsziele aufzurufen, müssen einige zusätzliche Pakete installiert werden: die ncurses-devel Und qt-devel Zum Beispiel werden Pakete erforderlich RPM-Build Paket wird benötigt, um eine Drehzahl mit dem kompilierten Kernel zu erstellen.

Herunterladen des Quell -Tarballs

Als erstes müssen wir den Tarball mit den neuesten stabilen Linux -Kernelquellen erhalten. Wir können den Tarball mit nur einem Befehl herunterladen und extrahieren:

$ curl https: // cdn.Kernel.org/pub/linux/kernel/v5.X/Linux-5.1.5.Teer.xz | tar -xj

Am Ende des Downloadprozesses in unserem aktuellen Arbeitsverzeichnis sollten wir einen neuen Ordner finden, der den Kernel -Quellcode enthält. Wir müssen es in diesem Fall eingeben:

$ CD Linux-5.1.5

Zu diesem Zeitpunkt können wir den Kernel konfigurieren. Im nächsten Absatz werden wir uns die häufigsten Konfigurationsziele ansehen, die zur Erfüllung der Aufgabe verwendet werden.

Konfigurieren des Kernels

Es gibt verschiedene Möglichkeiten, wie wir den Kernel konfigurieren können, und sie entsprechen unterschiedlich Konfigurationsziele. Wenn ein Konfigurationsziel aufgerufen wird, wenn eine Datei benannt .Konfiguration Eine gültige Kernelkonfiguration findet sich im Quellenverzeichnis. Sie wird als Ausgangspunkt für das Setup verwendet. Dadurch wird eine bereits existierende Konfiguration aktualisiert oder geändert /Stiefel Verzeichnis, nach dem verwendeten Kernel benannt).

Wenn die Datei nicht gefunden wird, beginnt die Konfiguration von vorne und die .Konfiguration Die Datei wird generiert, sobald wir unser Setup gespeichert haben. Lassen Sie uns einige der Konfigurationsziele wir können benutzen:

Konfiguration

Wenn dieses Ziel aufgerufen wird, wird der Benutzer aufgefordert, den Kernel durch Beantwortung einer Reihe von Fragen auf folgende Weise zu konfigurieren:

* * Linux/x86 5.1.5 Kernelkonfiguration * * * Compiler: GCC (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1) * * * Allgemeine Setup * Kompilierende Treiber, die nicht geladen werden (compile_test) [n/y/?] 

Menuconfig

Dieses Ziel verwendet ein nettes und benutzerfreundliches Ziel Ncurses Schnittstelle, um uns die Kernelkonfiguration zu generieren oder zu aktualisieren. Wie bereits erwähnt, können Sie diese Schnittstelle verwenden ncurses-devel Das Paket muss im System installiert werden.



Die NCURSES-basierte Konfiguration inteface

Mit dieser Schnittstelle können wir die drücken H Schlüssel beim Hervorheben einer bestimmten Option, um Informationen und Vorschläge dazu zu erhalten:



Das Erhalten von Informationen über eine Option ist nur eine Frage der Auswahl und Drücken Sie die H -Taste zum H -Taste Y Bei einer Option wird es statisch in den Kernel einbezogen (die Option wird mit a markiert *), drücken N wird es ausschließen und die drücken M Der Schlüssel beinhaltet es als Modul (die Option wird mit einem markiert M). Um nach einer bestimmten Option zu suchen, können wir die verwenden / Schlüssel und geben Sie die String oder Regex an, um nach zu suchen:

Die NCURSSE -Schnittstelle sucht nach einer bestimmten Option

xconfig

Durch das Aufrufen dieses Ziels ist es möglich, den Kernel über eine grafische Schnittstelle basierend auf dem zu konfigurieren Qt Toolkit Wenn die qt-devel Das Paket ist im System installiert.



Die QT-basierte Konfigurationsschnittstelle

OldConfig

Dieses Ziel ist es nützlich, wenn wir eine bereits vorhandene Kernelkonfiguration als Ausgangspunkt verwenden möchten. Wenn wir dieses Ziel aufrufen, werden wir aufgefordert, nur die im Kernel verfügbaren Funktionen zu konfigurieren, die wir konfigurieren, aber nicht in der ursprünglichen Konfigurationsdatei enthalten sind.

localmodconfig

Wenn Sie dieses Ziel aufrufen. Nur sie werden in die Konfiguration einbezogen, die anderen werden deaktiviert. Dies kann als schnelle Möglichkeit verwendet werden, einen maßgeschneiderten Kernel basierend auf dem aktuellen Zustand einer Maschine zu erhalten.

Lokalyesconfig

Dieses Ziel funktioniert ähnlich wie localmodconfig Mit einem großen Unterschied: Die Funktionen der derzeit im System geladenen Module werden statisch in den Kernel einbezogen.

Kompilieren und Installieren des Kernels

Sobald wir den Kernel konfiguriert haben, können wir den Quellcode kompilieren. Alles, was wir tun müssen, ist zu rennen:

$ make


Die Operation kann eine Weile dauern, abhängig von den Merkmalen, die wir in den Kernel einbezogen haben. Um den Prozess zu beschleunigen, können wir ausführen machen mit dem -J Option und geben Sie die Anzahl der Jobs an, die gleichzeitig ausgeführt werden sollen: Ein für diese Option häufig verwendeter Wert ist die Anzahl der logischen CPU -Kerne + 1. Auf einer Maschine mit 4 logischen Kernen würden wir daher laufen:

$ make -j5

Sobald er zusammengestellt wurde, können wir einfach ausführen, um den Kernel zu installieren:

$ sudo installieren

Die Kernel -Kerndateien werden in die kopiert /Stiefel Verzeichnis. Um die Kernel -Module zu kompilieren und zu installieren, können wir stattdessen ausführen:

$ sudo machen modules_install

Die Kernelmodule werden in einem Verzeichnis unter installiert /lib/module benannt nach der Kernelversion. Schließlich müssen wir die GRUB -Konfiguration regenerieren, damit der neue Kernel beim Start verfügbar und ausgewählt werden kann:

$ sudo grub2 -mkconfig -o/boot/grub2/grub.CFG

Verpackung des Kernels

Anstatt den kompilierten Kernel wie oben direkt zu installieren, können wir eine erstellen, um seine Installation und Entfernung über den Systempaketmanager zu verwalten, um eine zu erstellen Drehzahlpaket. Um die Aufgabe zu erfüllen, müssen wir eine zwischen den verwenden RPM-PKG Und binrpm-pkg Ziele. Der erste baut sowohl die Quell- als auch die binären Drehzahlpakete auf, die zweite nur die binäre. Damit dieses Ziel richtig laufen kann, die RPM-Build Paket muss installiert werden. Um nur das binäre Drehzahlpaket zu erstellen, würden wir ausführen:

$ make binrpm-pkg

Wenn die Operationen ohne Fehler durchgeführt werden, die rpmbuild Verzeichnisbaum wird in unserem Heimverzeichnis erstellt. Das gebaute RPM -Paket wird in einem Unterverzeichnis von erhältlich sein ~/rpmbuild/rpms benannt nach der Architektur des Systems.

Eine andere Möglichkeit besteht darin, den Kernel und seine Module in einem komprimierten Tarball zu verpacken, indem Sie einen zwischen den verwenden targz-pkg, Tarbz2-pkg Und tarxz-pkg Ziele, abhängig von der Komprimierung, die wir verwenden möchten. Der Tarball wird im Kernel -Quellverzeichnis erstellt.



Schlussfolgerungen

In diesem Tutorial haben wir gelernt zu wissen, warum Linux als monolithischer Kernel bezeichnet wird und wie seine Komponenten statisch oder als Module konfiguriert werden können. Wir haben gesehen, wie man einen Vanillekern und die verschiedenen Methoden heruntergeladen hat. Schließlich haben wir gesehen, wie man es kompiliert, verpackt und in unserem System installiert. Ein letzter Rat: Wenn Sie sich entscheiden, den Kernel neu zu kompilieren, ist es immer eine gute Idee, einen der von Zielreinigungsziele Vor fortfahren:

  • sauber: Entfernt die meisten generierten Dateien, behalten Sie jedoch die Konfiguration und genügend Build -Unterstützung, um externe Module zu erstellen
  • Mrproper: Entfernt alle generierten Dateien + Konfiguration + verschiedene Sicherungsdateien
  • Distclean: Führt MRPROPER aus und entfernt auch Editor Backup- und Patch -Dateien

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Linux -Download
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…
  • Dinge zu installieren auf Ubuntu 22.04
  • Wie man Kali Linux und Windows 10 Dual -Boot -Start hat