Ich habe den Kernel mit make menuconfig
und kompiliert make
. Ich habe versucht, das bzImage in qemu auszuführen, qemu -kernel bzImage
aber es hat mit der Fehlermeldung nicht geklappt :
Unable to mount root fs on unknown-block(0.0)
Wie kann ich es reparieren? Wie kann ich das bzImage in qemu ausführen?
linux
linux-kernel
qemu
Coder404
quelle
quelle
Antworten:
Es hat geklappt. Der Kernel bootete gut. Der Fehler ist:
Der Kernel sucht nach einem Root-Dateisystem. Sie müssen eine bereitstellen. Sie können nicht mit einem Kernel interagieren, ohne Prozesse darauf auszuführen, und der erste Prozess muss von irgendwoher geladen werden: Wenn der Kernel gestartet wird, wird ein Dateisystem (das Root-Dateisystem) im Verzeichnis bereitgestellt
/
und anschließend das Programm ausgeführt/sbin/init
. Das Init-Programm ist normalerweise für das Ausführen von Boot-Skripten und das Starten von Diensten verantwortlich, einschließlich Programmen, mit denen sich Benutzer anmelden können.Sie müssen sicherstellen, dass der Kernel das Root-Dateisystem bereitstellen kann. Es muss Treiber für den Dateisystemtyp und für alle am Blockgerät beteiligten Ebenen (Festplattencontroller (SCSI / SATA / IDE / USB /… Adapter), Partitionstyp usw.) enthalten.
Linux bietet eine zusätzliche Möglichkeit, nämlich das Laden eines anfänglichen Dateisystems in den Arbeitsspeicher, das während des Startvorgangs verwendet wird, um das Root-Dateisystem zu finden und bereitzustellen. Dieses anfängliche Dateisystem kann Module enthalten, die den Geräte- und Dateisystemtyp des Root-Dateisystems verarbeiten. Es gibt zwei leicht unterschiedliche Mechanismen: initrd und initramfs.
quelle
Obwohl die Dateisysteme allein vom Kernel kompiliert werden, muss ein erstes Dateisystem erstellt werden, das im RAM vorhanden ist, um den Kernel auszuführen. Um dieses anfängliche RAM-Dateisystem zu erstellen, wird mkinitrd verwendet. In Ubuntu wird stattdessen mkinitramfs verwendet
Danach führen Sie den Kernel auf Qemu aus
-initrd repräsentiert das ursprüngliche RAM-Dateisystem
Sie finden das RAM-Dateisystem unter /boot/initramfs-linux.img
quelle