Linux-Kernelkompilierung: Standalone-Betriebssystem

1377
morTie

Hallo Leute, ich bin neu im Linux-Kernel-Compilieren, also habe ich einige Fragen: Durch das Kompilieren von Linux-Kernel bauen wir ein völlig eigenständiges Betriebssystem auf, das nicht von Linux-Distributionen abhängt.

Wenn ja ... Nun, wenn ich die initrd-Datei mit dem Befehl initramfs erstellen möchte. Warum fügt sie Informationen über meine Linux-Destrubution hinzu (ich verwende Ubuntu 10.4)?

Wie sollte ich kompilierte Linux-Module kompilieren und hinzufügen und wo sollte ich sie ablegen?

Dies ist ein Überblick über das, was ich getan habe:

1.Einrichten der Kernel-Quelle (3.4.1) und Kompilieren mit dem Befehl "make all" (Ich verwende meine aktuelle linux .config)

  1. Grub auf meinem Memory Stick installieren

  2. Das kompilierte bzImage in das Verzeichnis / boot meines Memory Sticks kopieren

  3. Verwenden Sie den Befehl "initramfs", um die initrd-Datei zu erstellen, und legen Sie sie auch in / boot ab.

  4. Den PC mit dem Memory Stick booten und in das grub> Terminal einsteigen

  5. Verwenden von "root (hd0,0)"; "Kernel / boot / bzImage"; "initrd /boot/initrd.img" und dann "boot" -Befehle zum Booten.

  6. Einsteigen in (initramfs) Terminal nach einer Fehlermeldung, dass die Datei "/lib/modules/3.4.1/modules.dep" nicht gefunden werden konnte !!!

Was mache ich falsch ?

2

2 Antworten auf die Frage

10
tgies

Erstellen wir durch die Kompilierung eines Linux-Kernels ein völlig eigenständiges Betriebssystem, das nicht von Linux-Distributionen abhängig ist?

Nein. Linux an sich ist kein Betriebssystem. Es ist nur ein Kernel. Um die Interaktion mit dem Computer zu erleichtern, ist ein Benutzerland mit einer Sammlung von Systembibliotheken und Basissoftware erforderlich. Was wir üblicherweise unter "Linux" verstehen, wird von einem separaten Projekt namens "GNU-Projekt" bereitgestellt. Technisch sollten wir (und einige tun es) "GNU / Linux" nennen.

Nun, wenn ich die initrd-Datei mit dem Befehl initramfs erstellen möchte, warum werden dann Informationen über meine Linux-Destrubution hinzugefügt (ich verwende Ubuntu 10.4)?

Da Ihr initrd eine Sammlung von Programmen enthält, die Ihr System ursprünglich beim Booten eingerichtet haben, laden Sie die erforderlichen Treiber und Daemons, suchen Sie die erforderlichen Partitionen und legen Sie sie auf Ihren Festplatten usw. bereit. Sie ist nicht nur an Ihre eigenen Anforderungen angepasst Verteilung, aber auf Ihre spezielle Installation, Konfiguration und Ihren Computer. Es ist im Allgemeinen nicht mit Initrd eines anderen Benutzers austauschbar. Deshalb muss es von Ihrem System generiert werden.

Wie sollte ich kompilierte Linux-Module kompilieren und hinzufügen und wo sollte ich sie ablegen?

Wenn Sie Ihren eigenen Kernel make menuconfigkompilieren, tun Sie dies vermutlich vor dem Kompilieren im Kernel-Quellverzeichnis. So können Sie auswählen, welche Features kompiliert werden und ob sie in die Kernel-Binärdatei integriert oder als Module verfügbar gemacht werden.

Dies ist ein Überblick über das, was ich getan habe:

Es gibt eine Reihe von Gründen, warum dies nicht so funktioniert, wie Sie es wünschen.

die Kernel-Quelle (3.4.1) abrufen und mit dem Befehl "make all" kompilieren (ich verwende meine aktuelle linux .config)

Wenn Sie Ubuntu 10.04 ausführen, ist der 3.x-Zweig des Linux-Kernels um einiges älter, ganz zu schweigen von 3.4. Es wird höchstwahrscheinlich nicht richtig funktionieren, zumindest nicht ohne enorm viel zusätzliche Arbeit. Die Konfigurationsdateien haben sich ebenfalls ein wenig geändert, und ich bin ehrlich gesagt überrascht, dass sie keine Fehler nach links und rechts über Dinge in Ihrer (vermutlich für Linux 2.6) konfigurierten Konfigurationsdatei ausgibt, die nicht mit der Vorgehensweise in 3.4 übereinstimmen. Außerdem möchten Sie wahrscheinlich das Kernel-Quellpaket von Ubuntu und nicht die einfache Vanilla-Kernel-Quelle von kernel.org herunterladen, da Ubuntu den Kernel so installiert, dass er die benötigten Funktionen enthält und mit allen anderen Komponenten des Systems gut abspielt. Schließlich fehlen Ihnen einige Schritte, auf die ich später eingehen werde.

Das kompilierte bzImage in das Verzeichnis / boot meines Memory Sticks kopieren

Ich bin mir nicht sicher, was Sie damit vorhaben, aber wenn Sie eine vollständige bootfähige Linux-Installation auf Ihrem Memory Stick haben, steckt noch etwas mehr dahinter: Sie haben überhaupt keine Userland-Sachen auf diesem Speicher zum Beispiel stick. Wenn Sie dies richtig einrichten, führen Sie die Ubuntu-Installation auf Ihrer Festplatte mit dem Kernel auf Ihrem Memory Stick aus. Ich glaube, dass dies funktionieren sollte, aber warum sollte man den Kernel nicht einfach auf der Festplatte installieren? Sie können es neben Ihrem vorhandenen installieren, sodass Sie frei zwischen ihnen wechseln können.

Einsteigen in (initramfs) Terminal nach einer Fehlermeldung, dass die Datei "/lib/modules/3.4.1/modules.dep" nicht gefunden werden konnte !!!

Dies geht auf die versäumten Schritte zurück, die ich zuvor erwähnt habe. Sie benötigen make modules_installIhren neuen Kernel, um seine Module zu platzieren /lib/modules.

JEDOCH...

Nichts davon ist wirklich von Belang, denn im Idealfall sollten Sie einen Kernel überhaupt nicht auf "traditionelle" Weise kompilieren, es sei denn, Sie haben ein besonderes Bedürfnis. Wenn Sie tatsächlich Ihren eigenen Kernel kompilieren müssen, haben die meisten Distributionen heutzutage eine Möglichkeit, die benutzerdefinierte Kernel-Version zu verwenden (sofern vorhanden), den Build-Prozess zu automatisieren, den Kernel als Paket zu installieren, sodass Sie ihn sauber installieren und entfernen können und konfigurieren Sie Ihren Bootloader so, dass Sie zwischen den neuen oder den alten Kerneln wählen können. In Ubuntu sollten Sie diese Anweisungen befolgen: Kernel / Compile - Ubuntu Wiki

Das heißt nicht, dass Sie einen Kernel nicht auf "altmodische" Weise nur für Tritte / zu Bildungszwecken kompilieren können - ich habe meinen ersten Kernel so kompiliert, aber das war, bevor es bessere Möglichkeiten gab, dies zu tun. Wenn es für Sie wichtig ist, dass Ihr System nicht defekt ist, verwenden Sie die empfohlene Methode für Ihre Distribution, ihre Quelle und die Paketverwaltung.

Wenn Sie * wirklich * Ihr eigenes Linux aufbauen möchten, besuchen Sie http://linuxfromscratch.org. Beachten Sie, dass dies ein sehr komplexer und komplizierter Prozess ist und das Kompilieren Ihres Kernels wahrscheinlich der * einfachste * Teil davon ist. tgies vor 11 Jahren 1
1
LawrenceC

When you recompile or compile the Linux kernel, you are NOT creating a new distribution. You are making a newer or different version of the kernel only. The kernel is a single file that is loaded, then executed by the bootloader after your PC completes the POST process.

A distribution consists of many, many other files, including the standard UNIX utilities, usually a package manager, and others. None of this is touched if you (re)compile your own kernel.

It's been awhile since I've compiled my own kernel, but i think you need to run depmod -a after the make command.

"make module_install" installiert die Kernel-Module und führt, glaube ich, "depmod" für Sie aus. tgies vor 11 Jahren 0
Stattdessen ist es nicht notwendig oder sinnvoll, "depmod -a" in Bezug auf einen neuen Kernel auszuführen, den Sie gerade kompiliert haben, aber zu dem Zeitpunkt, zu dem Sie "depmod" aufrufen, nicht ausgeführt werden. "depmod" passiert vermutlich beim Booten, wenn es nötig ist. tgies vor 11 Jahren 0