Linux-Kernel-Kompilierung: Standalone-Betriebssystem

Linux-Kernel-Kompilierung: Standalone-Betriebssystem

Hallo Leute, ich bin neu beim Kompilieren eines Linux-Kernels, daher habe ich einige Fragen: Erstellen wir durch das Kompilieren eines Linux-Kernels ein völlig eigenständiges Betriebssystem, das von keinen Linux-Distributionen abhängig ist?

Falls ja ... Wenn ich die Initrd-Datei mit dem Befehl initramfs erstellen möchte, warum werden dann einige Informationen zu meiner laufenden Linux-Deinstallation hinzugefügt (ich verwende Ubuntu 10.4)?

Wie soll ich mein kompiliertes Linux kompilieren und Module hinzufügen und wo soll ich sie platzieren?

Dies ist eine Zusammenfassung meiner Aktivitäten:

1. Abrufen der Kernelquelle (3.4.1) und Kompilieren mit dem Befehl „make all“ (ich verwende meine aktuelle Linux-Konfigurationsdatei)

  1. Grub auf meinem Memory Stick installieren

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

  3. Verwenden Sie den Befehl „initramfs“, um die Initrd-Datei zu erstellen und sie ebenfalls im /boot-Verzeichnis abzulegen.

  4. Booten meines PCs mit dem Memory Stick und Aufrufen des Grub>-Terminals

  5. Verwenden Sie zum Booten die Befehle „root (hd0,0)“, „kernel /boot/bzImage“, „initrd /boot/initrd.img“ und dann „boot“.

  6. Aufrufen des (initramfs-)Terminals nach der Fehlermeldung, dass die Datei „/lib/modules/3.4.1/modules.dep“ nicht gefunden werden konnte!!!

Was mache ich falsch ?

Antwort1

Erstellen wir durch das Kompilieren des 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.Benutzerland, bestehend aus einer Sammlung von Systembibliotheken und Basissoftware, ist notwendig, um Ihre Interaktion mit dem Computer zu erleichtern. Was wir im Allgemeinen meinen, wenn wir von „Linux“ sprechen, wird von einem separaten Projekt namens GNU-Projekt bereitgestellt. Technisch gesehen sollten wir es „GNU/Linux“ nennen (und manche tun das auch).

Wenn ich die Initrd-Datei mit dem Befehl „initramfs“ erstellen möchte, warum werden dann einige Informationen zu meiner laufenden Linux-Deinstallation hinzugefügt (ich verwende Ubuntu 10.4)?

Denn Ihr initrd enthält die Sammlung von Programmen, die Ihr System beim Booten zunächst einrichten, erforderliche Treiber und Daemons laden, die erforderlichen Partitionen auf Ihren Festplatten finden und mounten usw. Es ist tatsächlich nicht nur auf Ihre Distribution, sondern auch auf Ihre spezielle Installation, Konfiguration und Ihren Computer zugeschnitten. Es ist im Allgemeinen nicht mit dem initrd anderer austauschbar. Deshalb muss es von Ihrem System generiert werden.

Wie soll ich mein kompiliertes Linux kompilieren und Module hinzufügen und wo soll ich sie platzieren?

Wenn Sie Ihren eigenen Kernel kompilieren, tun Sie dies vermutlich make menuconfigvor dem Kompilieren im Kernel-Quellverzeichnis. Dort können Sie auswählen, welche Funktionen kompiliert werden und ob diese in die Kernel-Binärdatei integriert oder als Module verfügbar gemacht werden.

Dies ist eine Zusammenfassung meiner Aktivitäten:

Es gibt eine Reihe von Gründen, warum dies nicht wie gewünscht funktioniert.

Abrufen der Kernel-Quelle (3.4.1) und Kompilieren mit dem Befehl „make all“ (ich verwende meine aktuelle Linux-Konfigurationsdatei)

Wenn Sie Ubuntu 10.04 verwenden, das deutlich älter ist als der 3.x-Zweig des Linux-Kernels, ganz zu schweigen von 3.4, wird es höchstwahrscheinlich nicht richtig funktionieren, zumindest nicht ohne enormen Mehraufwand. Auch die Konfigurationsdateien haben sich ziemlich verändert, und ich bin ehrlich überrascht, dass es nicht ständig Fehler ausgibt, weil Dinge in Ihrer (vermutlich für Linux 2.6) Konfigurationsdatei nicht mit der Vorgehensweise in 3.4 übereinstimmen. Außerdem möchten Sie wahrscheinlich das Kernel-Quellpaket von Ubuntu herunterladen und nicht die einfache Kernel-Quelle von kernel.org, da Ubuntu den Kernel patcht, um die erforderlichen Funktionen einzuschließen und dafür zu sorgen, dass er mit allem anderen im System gut funktioniert. Schließlich fehlen Ihnen einige Schritte, auf die ich später eingehen werde.

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

Ich bin mir nicht sicher, was Sie damit beabsichtigen, aber wenn Sie eine vollständig bootfähige Linux-Installation auf Ihrem Memory Stick haben möchten, ist etwas mehr erforderlich – Sie haben beispielsweise keinerlei Userland-Kram auf diesem Memory Stick. Wenn es richtig eingerichtet ist, wird dies tatsächlich dazu führen, dass die Ubuntu-Installation auf Ihrer Festplatte mit dem Kernel auf Ihrem Memory Stick ausgeführt wird (oder versucht wird). Ich glaube, das sollte funktionieren, aber warum sollten Sie das tun, anstatt einfach den Kernel auf Ihrer Festplatte zu installieren? Sie können ihn parallel zu Ihrem vorhandenen installieren, sodass Sie frei zwischen ihnen wechseln können.

Aufrufen des (initramfs-)Terminals nach der Fehlermeldung, dass die Datei „/lib/modules/3.4.1/modules.dep“ nicht gefunden werden konnte!!!

Dies geht auf die vergessenen Schritte zurück, die ich zuvor erwähnt habe. Sie müssen make modules_installIhren neuen Kernel so einrichten, dass die Module darin platziert werden /lib/modules.

JEDOCH...

Nichts davon ist wirklich wichtig, denn idealerweise sollten Sie einen Kernel überhaupt nicht auf die „herkömmliche“ Art kompilieren, es sei denn, Sie haben einen ganz bestimmten Grund dafür. Wenn Sie heutzutage tatsächlich Ihren eigenen Kernel kompilieren müssen, haben die meisten Distributionen eine Möglichkeit, dies zu tun, indem sie ihre benutzerdefinierte Kernelversion (falls zutreffend) verwenden, den Build-Prozess automatisieren, den Kernel als Paket installieren, sodass Sie ihn bei Bedarf sauber installieren und entfernen können, und Ihren Bootloader so konfigurieren, dass Sie zwischen den neuen und den alten Kerneln wählen können. In Ubuntu sollten Sie diese Anweisungen befolgen:Kernel/Kompilieren – Ubuntu Wiki

Das heißt nicht, dass Sie einen Kernel nicht einfach zum Spaß oder zu Bildungszwecken auf die „altmodische“ Art kompilieren können – ich habe meinen ersten Kernel so kompiliert, aber das war, bevor es bessere Methoden gab. Wenn es Ihnen wichtig ist, dass Ihr System nicht kaputt ist, verwenden Sie die für Ihre Distribution empfohlene Methode, verwenden Sie deren Quelle und deren Paketverwaltung.

Antwort2

Wenn Sie den Linux-Kernel neu kompilieren oder neu kompilieren, erstellen Sie KEINE neue Distribution. Sie erstellen lediglich eine neuere oder andere Version des Kernels. Der Kernel ist eine einzelne Datei, die geladen und dann vom Bootloader ausgeführt wird, nachdem Ihr PC den POST-Prozess abgeschlossen hat.

Eine Distribution besteht aus vielen, vielen anderen Dateien, darunter die Standard-UNIX-Dienstprogramme, normalerweise ein Paketmanager usw. Nichts davon wird berührt, wenn Sie Ihren eigenen Kernel (neu) kompilieren.

Es ist schon eine Weile her, seit ich meinen eigenen Kernel kompiliert habe, aber ich glaube, Sie müssen depmod -aden makeBefehl ausführen.

verwandte Informationen