Wie starte ich Linux ohne Initramfs?

7

Ich suche nach einer Möglichkeit, einen vorhandenen Linux-Kernel ohne initramfs zu booten. Laut diesem Link sollte es einfach durch Bearbeiten möglich sein /boot/grub2/grub.cfg. Aber wenn ich diese Konfiguration versuche

menuentry 'Fedora Linux, no initramfs' {
   set root='hd0,msdos1'
   linux    /vmlinuz-3.3.4-5.fc17.i686.PAE rootfstype=ext4 root=/dev/sda2 rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True  KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8
}

Der Startvorgang wird mit einer Kernel-Panik an dem Punkt beendet, an dem der Kernel versucht, die initramfs bereitzustellen. Muss ich während des Kompilierungsprozesses mitteilen, dass ich kein Initramfs möchte? Die einzige Konfigurationsoption, die ich gefunden habe, ist CONFIG_INITRAMFS_SOURCEdie, die bereits eingestellt ist CONFIG_INITRAMFS_SOURCE="".

Ich weiß, dass es eine ähnliche Frage gibt, aber es fehlt eine Erklärung, wie man es in der Praxis macht.

JohnnyFromBF
quelle
Ok, es scheint eine andere Option zu geben: CONFIG_BLK_DEV_INITRD.
JohnnyFromBF
1
In den meisten Distributionskernen (der mit der Distribution gelieferte Kernel, in Ihrem Fall Fedora) sind nicht alle zum Booten erforderlichen Treiber (Festplattentreiber, Dateisysteme usw.) kompiliert, sondern in einem Initramfs gespeichert. (Diese müssen Sie zu Ihrer .config hinzufügen, damit Ihr Kernel funktioniert.) Auf diese Weise kann das System beim Booten erkennen, welche Treiber benötigt werden (z. B. SATA anstelle von IDE) und alle unnötigen Treiber entfernen Wenn sie kompiliert würden, könnten sie nicht entfernt werden. Wenn Sie immer noch interessiert sind, hinterlassen Sie einen Kommentar und ich werde eine vollständige Antwort schreiben.
Billy

Antworten:

1

Initramfs verfügt über alle erforderlichen Informationen, die das Betriebssystem zum Starten des Systems benötigt. Es enthält alle Informationen zum Dateisystem (z. B. welche Geräte von und welche Geräte über Root-Fs verfügen, die für den Systemstart bereitgestellt werden müssen) und den Inhalt werden kernelspezifisch generiert. Sie können von einem anderen Image booten, das alle erforderlichen Informationen enthalten sollte.

Vmlinux, das Sie verwenden möchten, ist ein statisch verknüpftes Image. Es kann nicht vom System gestartet werden. Nach meinem besten Wissen wird es hauptsächlich zum Generieren und Debuggen von Symbolen verwendet.

Es ist nicht so, dass es nicht zum Booten verwendet werden kann, aber es muss bootfähig gemacht werden, bevor es verwendet wird. Da es keine Bootsektorinformationen enthält.

Amitam
quelle
1
Sie haben Recht mit vmlinux; Sie können ein System nicht (direkt) davon booten. Es gibt jedoch einen Unterschied zwischen vmlinux und vmlinuz (letzteres ist das, was das OP zu booten versucht). 'vmlinuz' ist einfach das, was ein Kernel (bz) Image (das bootfähig ist) benannt wird, wenn es installiert und nach / boot kopiert wird.
Billy