Wenn Sie Ihren eigenen Kernel zusammenstellen müssen

Wenn Sie Ihren eigenen Kernel zusammenstellen müssen

Sie haben beschlossen, dieses Ding auszuprobieren, über das Sie andere sprechen hören, und namens "Kompilien eines benutzerdefinierten Kernels". Wenn Sie dies als Hobby versuchen oder weil Sie eine neue Fähigkeit lernen möchten, lesen Sie sehr gut weiter.

Bevor wir jedoch anfangen, werden wir versuchen, Situationen zu erklären, wenn dieser Bedarf entsteht und wie wir damit umgehen sollen. Beachten Sie, dass dies ein umfangreiches Thema ist, das viel mehr in Bezug auf den Raum benötigt, als wir hier bereitstellen werden. Sie lernen die Grundlagen, was Sie brauchen, was zu tun ist und was Sie erreichen werden.

Für weitere Informationen ist Google wie gewohnt Ihr Freund. Auch die im Kernel Source Tree ansässige Dokumentation beantwortet viele Fragen. Beginnen wir also mit dem Anfang mit einem letzten Hinweis: Bei Bedarf werden wir mehr Artikel im Zusammenhang mit Kernel -Kompilieren in Bezug auf andere Distributionen veröffentlichen.

Wenn Sie Ihren eigenen Kernel zusammenstellen müssen

Die erste Situation wäre, wenn Sie einen neueren Kernel benötigen als Ihre Distribution, insbesondere wenn Sie eine stabile Verteilung ausführen (e.G. Debian Stable, CentOS), weil Ihr Kernel keine Funktionen/Fahrer unterstützt, die Sie benötigen.

Eine Warnung jedoch: Wenn Sie einen Kernelkernkern ausführen möchten, stellen Sie sicher, dass er mit anderen Schlüsselkomponenten Ihres Systems (wie GLIBC) kompatibel ist. Denken Sie daran, dass neuerer weniger Tests und (wahrscheinlich) mehr Instabilität bedeutet. Die Kernel-Betreuer Ihrer Distribution leisten normalerweise einen guten Job, um einige neue Funktionen für ältere, stabilere Kerne zu verbergen. Stellen Sie daher sicher, dass Sie wirklich Blutungen benötigen. Unser Rat ist nicht, diese Kernel (die langfristigen Kerne würden hier eine Ausnahme machen) auf Produktionssystemen zu verwenden. Vertrauen Sie den Betreuer der Distribose Ihrer Distribution.

Die zweite Situation ist, dass Sie das Gefühl haben, einen aufgeblähten Kernel zu führen, wobei viele Komponenten nicht benötigt werden. Während der Kernel nur Module lädt, die zu einer existierenden Hardware entsprechen.

# lspci -vv # lsusb # hwinfo # cat /proc /cpuinfo 

Oben Befehle helfen Ihnen, Ihre Hardware besser kennenzulernen. Schreiben Sie auf, was Sie gefunden haben, und stellen Sie sicher.

Eine andere Situation wäre, dass Sie beim Testen des Kernels helfen möchten, indem Sie die neuesten in Ihrem System ausführen. Die gleichen Warnungen wie oben gelten: Machen.org ist die wichtigste Kernel -Mailingliste - hoher Verkehr) und versuchen Sie, so hilfsbereit wie möglich zu sein, wenn sie nach Informationen gefragt werden.Dies kann nicht genug betont werden: Lesen Sie die Dokumentation, entweder weil Sie sich in einer bösen Situation befinden, möchten einen Fehler melden oder einfach Fragen haben.

Als Nächst. Möglicherweise möchten Sie zuerst nachsehen, ob Ihre Verteilung noch kein neueres Kernel -Paket anbietet. Sie können beispielsweise Kernel von Debian Experimental in einem Testsystem installieren, wenn Sie Ihre Quellen ändern.Auflisten entsprechend. Arbeiten Sie erneut mit den Betreuern zusammen, wenn Sie auf einen Fehler stolpern.

Terminologie

Bevor wir uns weiter mit diesem etwas arkanen Thema befassen, sollten wir einige grundlegende Begriffe klarstellen (ER). Dies ist wichtig, um wichtige Teile von Kernel -Tests und -Compilien zu verstehen.

  • Kernel - Der Kern des Betriebssystems, verantwortlich für die Verwaltung von Hardware -Ressourcen (E/A, Netzwerk, CPU, Speicher…). Grundsätzlich ist es der wesentliche Bestandteil des Betriebssystems, der für alle schmutzigen Arbeiten verantwortlich ist. Benutzerprogramme kommunizieren mit dem Kernel und fordern CPU -Zeit oder andere Ressourcen nach Systembibliotheken an, die als Vermittler zwischen Userland (siehe unten) und Kernel / Hardware fungieren. Kernel können monolithisch und microkernel sein (für weitere Informationen siehe Kernelweite Designansätze bei Wikipedia.Org . Microkernel (wie Minix) verwenden ein Entwurfsschema, das den Kern vom Rest des Kernels unterteilt, und diese Ruhe ist in Komponenten unterteilt, die jeweils etwas Bestimmtes tun: I/A, Networking usw. Monolithische Kerne (Linux, BSD, Solaris) umfassen, wie der Name schon sagt, den größten Teil des Kernels in einer Einheit mit zusätzlicher Funktionalität (e.G. Treiber) von Modulen bereitgestellt. Es gibt auch Hybridkerne, eine Kombination zwischen den beiden, ein gutes Beispiel ist der Windows -Kernel.
  • Userland - Alles in einem Betriebssystem, das nicht Teil des Kernels (Bibliotheken, Anwendungen) ist, gilt als Teil von Userland. Der Name ist so offensichtlich.
  • Modul - Wie bereits gezeigt, ist ein Kernel -Modul eine binäre Software, die den Kernel im Grunde genommen „lehrt“, wie man mit einem Stück Hardware „spricht“ oder eine gewisse Funktionalität liefert (e.G. NFS)
  • Compiler - Der Compiler ist eine Anwendung, die den schriftlichen Code im Grunde genommen von Ihnen vom Kernel heruntergeladen wird.Org und verwandelt es in Binärdateien. Der in Linux -Verteilungen gefundene Compiler wird als "GCC" bezeichnet und steht für die GNU Compiler Collection, die auch Komponenten benötigt, um Software zu erstellen: Versorgungsunternehmen in Binutils wie dem Assembler (AS) oder Library Archiver (AR), der in Binutils zu finden ist .Auf Debian Systems oder Ubuntu finden Sie, zu welchem ​​Paket eine Datei gehört, indem sie APT-Datei installieren und ausführen. Apropos: Lassen Sie uns sehen, welche Pakete wir für einen erfolgreichen Kernel -Build installieren müssen.
  • Vanillekern - Dies ist der Name, der für den stromaufwärtigen Kernel verwendet wird, wie auf Kernel gefunden.Org, also ohne distrospezifische Patches.

Bitte beachten Sie, dass wenn Sie in diesem Dokument einen Befehl sehen, der mit der Eingabeaufforderung beginnt "$" Das bedeutet, dass der Befehl als normaler, alltäglicher Benutzer ausgeführt werden muss. Wann immer Sie das sehen '#' Eingabeaufforderung bedeutet, dass der Befehl als Root ausgeführt werden soll (wir verwenden sudo, aber das ist nicht obligatorisch). Das aktuelle Verzeichnis ist, sofern nicht anders angegeben.6.

Was Sie installieren müssen

  • GCC - Natürlich ist der Compiler unerlässlich
  • BINUTILS - Dieses Paket enthält den Linker, Assembler und andere Versorgungsunternehmen, die für die Zusammenstellung von Programmen in C von entscheidender Bedeutung sind.
  • GCC -Doc - Handbuch und Info -Seiten für GCC. Nützlich, wenn Sie schmutzig werden und einige Kompilierflags ändern möchten. Nützlich, wenn Sie C -Pakete schreiben oder kompilieren möchten.
  • GDB - der GNU -Debugger. Nicht obligatorisch, aber nützlich, wenn etwas schief geht. GDB-Doc wird auch helfen.
  • libreadline5-dev-Zur Verwendung der Kernel-Konfiguration NCURSES-basierte Schnittstelle. Sie können andere Schnittstellen verwenden (siehe unten).
  • Made - wird als Abhängigkeit installiert, aber nur wenige Wörter sind in Ordnung. Wenden Sie sich an das Handbuch oder die Bücher, da dies kein Thema ist, das in einem so kurzen Raum leicht erklärt werden muss. Make ist ein Dienstprogramm, das beim Kompilieren von C/C ++ - Programmen verwendet wird, und was es tut, ist in einem Makefile, das Regeln darüber enthält. Lesen Sie die Makefiles im Quellbaum, um einen Blick zu erhalten.
  • Git-Git ist ein VCS (Versionskontrollsystem), das was CVS oder Subversion tut, nämlich die Aufklärung über den neuesten Kernelbaum, um Sie auf dem Laufenden zu halten.

Die Kernelquelle bekommen

Wenn Sie die Quelle aus Ihrer Verteilung installieren möchten, verwenden Sie

# APT-Get Installieren Sie Linux-Source-

Wo kann durch die Ausstellung gesammelt werden:

Uname -r 

Verwenden Sie dies, wenn Sie Ihren vorhandenen Kernel ändern möchten (Hinzufügen von Treibern, Trimmen usw. ). Ansonsten willst du den Vanillekernel. Sie können es von www bekommen.Kernel.org (wir empfehlen WGet oder Curl hier als Download -Manager) oder, wenn Sie das neueste möchten, verwenden Sie Git. Wir empfehlen, die Quelle im Heimverzeichnis Ihres Benutzers zu speichern, und der Befehl, den neuesten Mainline -Baum zu erhalten, ist (siehe Man Git):

$ git klone git: // git.Kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.Git Linux-2.6 

In der Vergangenheit fanden wir das Mini-Howto unter http: // linux.yyz.US/Git-Howto.html nützlich sein; Schauen Sie sich auch KernelNewbies an.Org . Der obige Befehl erstellt einen Ordner in Ihrem aktuellen Verzeichnis mit dem Namen Linux-2.6, der später durch CD in die aktuelle Aktualisierung aktualisiert werden kann und ein einfaches ausgibt

sauber machen; Git ziehen 

Nachdem Sie die Quelle haben, müssen wir den Kernel konfigurieren .

Konfiguration und Gebäude

Wenn Sie eine vorhanden haben .Konfigurationsdatei (die Datei mit den Optionen für den Kernelgebäude - was in und was nicht), kopieren Sie sie in Linux -2.6 (aus /boot /config- oder /proc /config.GZ - die aktuelle Konfiguration). Wenn Sie das vorhandene nicht ändern möchten .Konfiguration, einfach ausgeben

$ make OldConfig 

Ansonsten lesen Sie weiter. Wenn Sie die vorhandene Konfiguration ändern möchten, problematisch

$ make Menuconfig 

(Empfehlung: Sie können Konfiguration für viele Fragen zu Optionen im Kernel verwenden oder XConfig, die QT -Bibliotheken benötigen, für ein schöneres, grafisches Menü erfordern) und wählen Sie „eine alternative Konfigurationsdatei laden“ und drücken Sie die Eingabetaste für die Eingabetaste für .Konfiguration, den Standardnamen der Konfigurationsdatei oder ein alternativer Dateiname eingeben, der bereits in Linux-2 gespeichert ist.6.

Danach gehen Sie durch die Menüs, um die notwendigen Änderungen vorzunehmen. Die Faustregel lautet: „Wenn Sie nicht wissen, was es tut, legte dich nicht mit dem an“, zumindest bis du etwas Erfahrung bekommst. Wählen Sie am Ende im oberen Menü "Eine alternative Konfigurationsdatei speichern". Drücken Sie die Eingabetaste für den Standardnamen (.config - empfohlen) und dann "beenden" von unten beenden. Wenn Sie von vorne anfangen möchten, vergessen Sie den Schritt „Laden Sie eine alternative Konfigurationsdatei“ und fahren Sie fort. Verwenden Sie bei Ihrem nächsten Kernel -Kompilieren nach der Reinigung und Aktualisierung des Baumes "OldConfig" wie oben, um die alte Konfiguration zu verwenden. OK, jetzt haben wir die Konfiguration auf unsere Bedürfnisse zugeschnitten, die nur darauf wartet, gebaut zu werden. Das Erstellen eines Kernels ist so einfach wie die Konfiguration (es zu konfigurieren (!). Geben Sie einfach ein und die Ausgabe sollte wie unten aussehen:

$ make hostcc -Skripte/Basic/FixDep Hostccccs/kconfig/conf.o Versandskripte/kconfig/zconf versendet.Tab.c Versendete Skripte/kconfig/Zconf.Lex.c Versendete Skripte/kconfig/Zconf.Hash.c Hostcc -Skripte/Kconfig/ZConf.Tab.o HostlD -Skripte/kconfig/conf chk include/Linux/Version.h ups include/Linux/Version.H chk umfassen/generiert/utsrelease.h ups inclyde/generiert/utsrelease.H CC -Kernel/Grenzen.S Gen umfassen/erzeugt/Grenzen.H CC Arch/X86/Kernel/Asm-Offsets.S… 

Und nach einer Weile wird je nach Konfiguration Ihrer Maschine und Kernel erledigt. Wenn Sie die Dinge ein wenig beschleunigen möchten, verwenden Sie das -Jn -Flag, um die Anzahl der Prozessoren/Kerne + 1 zu machen. Seien Sie jedoch vorsichtig, dass Fehler im Kernel aufdecken oder die Infrastruktur erstellen können. Wenn also etwas schief geht, versuchen Sie es erneut, indem Sie einfach ohne Flaggen verwenden. Wenn Sie nach dem Lesen des GCC-Handbuchs (und wenn Sie immer noch gesund sind), fühlen Sie sich abenteuerlich und möchten einige hardwarespezifische Flags ändern oder den Code optimieren möchten, verwenden ). Optimierungen größer als -O2 sind jedoch riskant.

Seien Sie vorsichtig und erwarten Sie Bruch, der Kernel kann ohne Probleme zusammenstellen, aber es kann seltsam wirken. Denken Sie daran, alle Befehle als normaler Benutzer einzugeben. Sie müssen nicht als Wurzel und die Kernelentwickler aufgebaut.

Installation

Installieren wir nun die Module: Dies muss als Root durchgeführt werden, da die Module in /lib installiert sind und der normale Benutzer dort keinen Schreibzugriff hat. So,

# MADE MODULES_INSTALL 

tut genau das, und dies muss vor der Installation des Kernels durchgeführt werden, damit Module und installierte Kernel synchronisiert sind. Verwenden

# Installation machen 

Um den Kernel an /starten zu installieren, dann

# DetMod 

und bereiten Sie sich auf das Erstellen eines Initramfs (anfängliches RAM -Dateisystem) vor, ein temporäres Dateisystem, das in frühen Startphasen zu RAM geladen wird. Es wird verwendet, um grundlegende Treiber und andere Einrichtungen bereitzustellen, damit das Root -Dateisystem montiert werden kann. Weitere Informationen finden Sie in der Initrd -Seite von Wikipedia. Der für die Aufgabe benötigte Befehl ist Update -initramfs (dies wird auch aufgerufen, wenn ein neuer Kernel installiert, der vom Paketmanager ausgelöst wird), mit dem ein Initramfs (-c) erstellt oder vorhandenes (-U) erstellt oder ein vorhandenes aktualisiert wird . Der vollständige Befehl ist

# Update -initramfs -c -k 

Die Version ist diejenige, die Sie nach 'Make modules_install' beendet sehen werden (die letzte Zeile der Ausgabe ist "Depmod").Wenn Sie die genaue und längere Versionsnummer haben möchten, können Sie den Entwicklern mitteilen, welche „Git -Moment“ Sie verwendet haben. Die Ausgabe auf meinem Ubuntu -System sieht so aus:

update-initramfs: generieren /boot /initrd.IMG-3.1.0-RC3+… 

Aktualisieren Sie Ihr Maden, damit Ihr neuer Kernel mit

# Update-Grub 

Auf meiner Debian -Testmaschine sieht die Ausgabe so aus:

Grub erzeugen.CFG… gefundenes Hintergrundbild:/usr/sharge/bilder/desktop-base/desktop-grub.PNG gefunden Linux Image: /boot /vmlinuz-3.0.0-1-AMD64 Found Initrd Image: /boot /initrd.IMG-3.0.0-1-AMD64 Found Linux Image: /boot /vmlinuz-3.0.0-RC6-AMD64 Found Initrd Image: /boot /initrd.IMG-3.0.0-RC6-AMD64 Found Linux Image: /boot /vmlinuz-2.6.39-07727-GBD1BFE4 Found Initrd Image: /boot /initrd.IMG-2.6.39-07727-GBD1BFE4 Found Linux Image: /boot /vmlinuz-2.6.39-2-AMD64 Initrd Image: /boot /initrd gefunden.IMG-2.6.39-2-AMD64 Found Linux Image: /boot /vmlinuz-2.6.39-RC7-AMD64 Found Initrd Image: /boot /initrd.IMG-2.6.39-RC7-AMD64 Found Linux Image: /boot /vmlinuz-2.6.38.5 gefunden initrd Image: /boot /initrd.IMG-2.6.38.5 gefunden Linux Image: /boot /vmlinuz-2.6.38.4-00001-GFAA8EE7 INITRD Image: /boot /initrd.IMG-2.6.38.4-00001-GFAA8EE7 Found Linux Image: /boot /vmlinuz-2.6.38.4 Found Initrd Image: /boot /initrd.IMG-2.6.38.4 gefunden Linux Image: /boot /vmlinuz-2.6.38-2-AMD64 Found Initrd Image: /boot /initrd.IMG-2.6.38-2-AMD64 Found Linux Image: /boot /vmlinuz-2.6.32-5-AMD64 Found Initrd Image: /boot /initrd.IMG-2.6.32-5-AMD64 Found memTest86+ Bild: /memTest86+.Bin Found memTest86+ Multiboot -Bild: /memTest86+ _multiboot.Mülleimer fertig 

Natürlich sieht Ihre Ausgabe nicht genau gleich aus, aber der Umriss sollte der gleiche sein. Denken Sie schließlich daran: Wenn Sie möchten, bearbeiten Sie/etc/Standard/Grub, um einige Optionen vor dem Update-Grub zu ändern. Mit gekreuzten Daumen starten Sie Ihre Maschine neu, um den neuen Kernel zu testen.

Wenn etwas schief läuft

Die üblichsten Situationen, in denen Ihr neuer Kernel unbrauchbar ist, ist, dass Sie ihn nicht überhaupt nicht booten können oder dass er startet und keinen wesentlichen Treiber hat (z. B. Networking -Treiber). Normalerweise macht Update-GRUB gute Arbeit beim Schreiben der Grub-Menüdatei, aber Sie möchten sie vielleicht trotzdem überprüfen. Wenn Sie Grub bestehen, sind Sie wahrscheinlich übereifrig und haben einen wesentlichen Treiber für das System herausgehoben, wie die diskbezogenen Teile (ATA, SATA, SCSI…) oder vielleicht NFS, wenn Sie eine NFS-montierte Wurzel haben. Starten Sie einen funktionierenden Kernel und konfigurieren Sie ihn mit Google und möglichen anderen Quellen wie IRC neu .

Die Chancen stehen gut, dass in der Vergangenheit bereits jemand auf Ihr Problem gestoßen ist, und Sie haben die Chancen, eine Antwort zu finden. Wenn das Problem schwerwiegender ist und Sie zuversichtlich sind, dass Sie über Netiquette und wie Sie auf der Kernel Mailingliste posten, fragen Sie sich gut. Es gibt viele nette und hilfsbereite Leute da draußen, aber sie sind in der Regel nicht so, wenn Sie Ihre Hausaufgaben nicht gemacht haben und/oder ihre Zeit verschwenden. Wenn Sie einen separaten /Boot haben, denken Sie daran, dass es normalerweise nicht sehr groß ist und sich schnell mit Kerneln füllen kann. Auch /lib /modules sammelt sich in /neigt dazu, von Zeit zu Zeit etwas aufzuräumen. Denken Sie daran, dass der Kernel eine komplexe Software ist und viele Ursachen die Wurzel Ihrer Probleme haben können. Wenn Sie keine Probleme hatten, diese Anleitung zu befolgen, sind Sie bereit für eine fortgeschrittenere Linux -Kernel -Konfiguration.

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
  • Ubuntu 20.04 Leitfaden
  • Wie man alte Kerne auf Ubuntu entfernen
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • Hung Linux System? Wie man zur Befehlszeile entkommt und…
  • Dinge zu installieren auf Ubuntu 22.04
  • Installieren Sie Arch Linux in VMware Workstation