
Ist es möglich, ein Initramfs-Image in einen vorhandenen Kernel einzubetten, ohne das Ganze neu zu kompilieren? Ich habe nicht die Ressourcen, das zu tun.
Antwort1
initramfs kann zur Build-Zeit in den Kernel eingebettet werden (natürlich ist dies über menuconfig möglich, indem der Rootfs-Baum ausgewählt wird). Und kann unter bestimmten Umständen nützlich sein. Beachten Sie nur, dass jedes proprietäre Rootfs-Tool in der endgültigen Binärdatei nach der Einbettung möglicherweise die GPL verletzt. Aber solange Ihr initramfs nur einige Busybox-Sachen enthält, sollte es keine Probleme geben.
Antwort2
normalerweise würde niemand ein Initramfs-Image in einen Kernel integrieren, soweit ich weiß, ist das auch nicht möglich (ohne den Code entgegen dem Konzept neu zu schreiben), zumindest ist es nicht vorgesehen.
Das initrd ist immer ein separater Datenstrom (Datei), der zusammen mit dem Kernel geladen wird, um beim Booten zu helfen. Es ist optional, aber in modernen GNU/Linux-Distributionen fast immer enthalten.
Du musst dir also nicht die Frage stellen, wie du es einbindest, sondern wie du es ändern kannst. Schau dir also deine Bootloader-Konfiguration an. Normalerweise solltest du 3 Dinge feststellen (auch meist in dieser Reihenfolge):
- Kernel-Image (etwas, das Ihren Bootloader zum Kernel-Image führt (meistens eine Datei), um es in den RAM zu laden
- Befehlszeile (eine Zeichenfolge, die auch in den RAM geschrieben wird, damit der Kernel darauf zugreifen und sie verwenden kann (wie das Angeben von Parametern innerhalb eines Betriebssystems, aber außerhalb ist es nur Schreiben und Aufrufen (Assemblercode))) (dieses Ding hat meistens eine Option root=/dev/xy ro was auch immer
- ein Initrd-Image (optionales Image der anfänglichen RAM-Disk, das nach dem Kernel in den RAM geladen wird. Der Kernel verwendet es dann als virtuelle Festplatte, die hauptsächlich dazu dient (es gibt aber beispielsweise auch Live-Systeme, die vollständig darin laufen), den Bootvorgang zu unterstützen, bevor das Root-FS gefunden und gemountet wird (z. B. Festplatten sind langsam und unbeständig (Reihenfolge der Festplatte, SCSI-Zeug, Booten vom Netzwerk, Dateisystemverschlüsselung, Notfall-Wiederherstellungs-Shell, falls fsck fehlschlägt, … usw.)
also, um Ihre Frage zu beantworten: Das müssen Sie nicht tun, wenn Ihr Bootloader nicht in der Lage ist, initrd direkt zu verwenden, und Sie ihn nicht ersetzen können. Laden Sie einfach einen anderen Bootloader damit (sehr veraltetes Zeug kann beispielsweise immer noch Grub als Kernel laden). Andernfalls aktualisieren Sie einfach den Pfad zur separaten initrd-Datei in Ihrer Bootloader-Konfiguration.
Übrigens, wenn Sie Grub2 verwenden, bearbeiten Sie die Konfiguration nicht direkt, sie wird durch Update-Grub unter Verwendung der Daten in /etc/default/grub und /etc/default/grub.d/ generiert. Unter der älteren Grub-Version bearbeiten Sie die Datei menu.lst immer noch direkt auf der Boot-Partition, aber Grub2 ist dafür viel zu komplex. Sie können Dinge immer noch direkt bearbeiten, aber sie werden höchstwahrscheinlich anschließend überschrieben, also ist das keine gute Idee …