Ich habe viele Tutorials darüber gelesen, wie man benutzerdefinierte Kernel erstellt und Ubuntu mit diesen Kerneln bootet, und habe die Anleitungen erfolgreich befolgt und benutzerdefinierte Kernel gebootet, aber ich habe kein Verständnis dafür, was die einzelnen Befehle in den Anleitungen bewirken und womit sie tatsächlich geschehen jeden Befehl.
Das Verfahren beschrieben Ubuntu - Website hat eine Menge Arbeit mit fakeroot
, dpkg
, make-kpkg
, einige Initramfs und andere schrecklichen Sachen , die funktionieren , aber einfach helfen mir nicht verstehen , was los ist.
- Was ist die Ausgabe
make
in einem Linux-Kernel-Verzeichnis? - Erzeugt es ein "komprimiertes Kernel-Image"?
- Wie heißt die "komprimierte Kernel-Image" -Datei und wo wird sie abgelegt?
- Was macht
make modules
das? - Sollte
make modules
vorher oder nachher gemacht werdenmake
? - Baut
make
meine Module nicht automatisch auf? - Was ist der Prozess (in Englisch nicht nur die Liste der Befehle), um neu erstellte Kernel zur Liste der bootfähigen Kernel hinzuzufügen?
- Was macht
make install
das? - Wird
make install
es meiner Liste bootfähiger Kernel hinzugefügt, damit ich nichts mehr tun muss? - Gibt es ein Äquivalent
make modules_install
?
ubuntu
linux-kernel
make
AnkurVj
quelle
quelle
Antworten:
Von oben...
make
Kompiliert und verknüpft das Kernel-Image. Dies ist eine einzelne Datei mit dem Namenvmlinuz
.make modules
Kompiliert individuelle Dateien für jede Frage, die SieM
während der Kernelkonfiguration beantwortet haben . Der Objektcode ist mit Ihrem neu erstellten Kernel verknüpft. (Bei beantworteten FragenY
sind diese bereits Teil vonvmlinuz
und bei beantworteten Fragen werdenN
sie übersprungen).make install
Installiert Ihren Kernel nach/vmlinuz
.make modules_install
Installiert die Kernelmodule auf/lib/modules
oder/lib/modules/<version>
.Das Hinzufügen zur Liste der verfügbaren Kernel übernimmt der Bootloader. Es ist für jeden Bootloader anders, aber es
grub
ist das häufigste bei x86 und amd64, also beschreibe ich das. Es ist eigentlich ganz einfach. Grub sieht in/
,/boot
und/lib/modules
für jede Sache , die aussieht wie es könnte ein funktionierenden Kernel und fügt es. Und ja, das ist eine vereinfachte Beschreibung.Dieses zusätzliche "schreckliche Zeug" in der Ubuntu-Dokumentation ist ein zusätzliches Zeug, um ein
deb
Paket zu erstellen . Wenn Sie es für mehr als sich selbst tun, ist es weitaus besser, es zu verpacken. Sie werden in der Zeit wechseln.Das Erstellen des Kernels und der Module wird getrennt gehalten, da die Benutzer (dh Kernelentwickler) häufig nur Änderungen an einem Modul vornehmen. Sie können ihre Änderungen anwenden, nur die Module neu erstellen und installieren. Das spart viel Zeit, wenn es 20 Mal am Tag gemacht werden muss. Es wird nie aktualisiert, um einen einzelnen
make everything
Befehl zu haben . Führen Sie stattdessen so aus,make && make modules && make install && make modules_install
wie es die Dokumentation vorschreibt . Der Build-Prozess bevorzugt Kernel-Entwickler, nicht Sie. Und so sollte es auch sein.In Wirklichkeit gibt es fast keinen Grund für irgendjemanden außer Kernel-Entwicklern oder Distributions-Packagern, einen Kernel zu kompilieren. In fast jedem Fall wurde die von Ihnen gewünschte Kernelfunktion bereits für Sie erstellt und ist in einem der vorgefertigten Kernel verfügbar. Es gibt Ausnahmen, aber diese sind heutzutage äußerst selten.
Nicht, dass ich Sie davon abhalten würde, Ihren eigenen Kernel zu erstellen, ich ermutige Sie sogar, dies zu tun. Ich denke, es ist von unschätzbarem Wert, Ihren Kernel von Grund auf neu zu erstellen, um zu lernen, wie das alles dort unten funktioniert. Im zweiten Teil, weil vielleicht einen Tag wird die Ausnahme sein , die er braucht. Aber es bringt Ihnen auch viel über den Kernel- und Boot-Prozess im Allgemeinen bei. Du wirst ein besserer Mensch sein, wenn du es getan hast.
quelle
/vmlinuz
ein Verzeichnis im Stammordner? Wenn ich eine make-Installation durchführe, wird dieses Verzeichnis erstellt und ein neuer Kernel dort abgelegt. Werdenmake modules_install
meine aktuell installierten Module ersetzt? Angenommen, ich lege mein vmlinux im / boot-Verzeichnis ab, muss ich noch etwas tun (z. B. Grub-Konfigurationsdateien bearbeiten und Grub-Update durchführen oder so?)make bzimage
ist, was das macht./vmlinuz
ist eine Binärdatei, kein Verzeichnis. Ich habe in den letzten 5 Jahren nur gepackte Kernel erstellt, daher kann ich mich nicht genau an das Verhaltenmodules_install
eines direkt installierten Kernels erinnern . Grub findet deinen Kernel/boot
ohne Hilfe. Ja, Sie sollten immergrub-update
nach der Installation eines neuen Kernels ausgeführt werden.make bzimage
stattmake
? Muss ich einmake clean
undmake bzimage
wieder machen? Durch/vmlinuz
meinen Sie die Datei in dem Root - Verzeichnis oder im Linux - Kernel - Quellverzeichnis erstellt werden?/
ist, ist ein absoluter Pfad. Ja, das ist eine Datei im Stammverzeichnis.Y
werden in kompiliert (dh sie sind Teil von vmlinuz). Beantwortete ModuleM
werden als ladbare Module übersetzt. Beantwortete ModuleN
werden nicht übersetzt.make modules_install
gilt nur für die beantwortetenM
.