Was passiert ist, dass Sie versuchen, Linux auf "veraltete" Weise zu booten. Hier initrdhandelt es sich um eine Ramdisk im Gegensatz zu einem komprimierten CPIO-Archiv, das vom Kernel in einem Ramfs entpackt wurde, und mit der alten Methode, zum Endgerät zu wechseln.
In diesem Modus stellt der Kernel die Datei disk.img als Ramdisk als Root-Dateisystem bereit und wird /linuxrcdort ausgeführt. In Ihrem Fall gibt es höchstwahrscheinlich keine solche Datei. Wenn /linuxrc(was alles tun soll, was erforderlich ist, um das Blockgerät für das echte Root-Dateisystem aufzurufen) beendet wird, stellt der Kernel das echte Root-Dateisystem bereit.
Die obigen Meldungen zeigen, dass die RAM-Festplatte erfolgreich bereitgestellt wird (1,0: 1 ist für ram, also /dev/ram0), aber nicht das echte Root-Dateisystem / dev / sda1 (8,1: 8 ist sd, 1 ist a1). Vermutlich, da Sie keine Kernel-Befehlszeile ( -append) angegeben haben, /dev/sda1stammt diese von einer CONFIG_CMDLINE, die zur Kernel-Kompilierungszeit oder mit übergeben wurde rdev.
Wenn Ihre disk.img ein Root-Dateisystem enthalten soll, beispielsweise eine kleine Linux-Distribution mit /sbin/init..., möchten Sie sie wahrscheinlich stattdessen schreiben:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
Dann würde der Kernel die RAM-Disk als das echte Root-Dateisystem behandeln (obwohl Sie immer noch ein pivot_rootanderes verwenden könnten ).
Um die Kernel-Nachrichten leichter sehen zu können, würde ich die Verwendung der seriellen Ausgabe empfehlen:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
Alternativ können Sie ein Init-Ramfs anstelle eines Init-Ramdisk verwenden:
mkdir -p RAMFS/{bin,dev}
cd RAMFS/bin
cp /bin/busybox .
"$PWD/busybox" --install .
cd ..
cp -a /dev/{null,tty,zero,console} dev
printf '%s\n' "#! /bin/sh" "exec /bin/sh" > init
chmod +x init
find . | cpio -oHnewc | gzip > ../initramfs.gz
cd ..
kvm -kernel kernel.img -initrd initramfs.gz
(vorausgesetzt, es busyboxhandelt sich um die statisch verknüpfte Version) und Sie erhalten eine Shell und andere Busybox-Dienstprogramme in diesem Kernel.
Beachten Sie, dass der Kernel jetzt /initim Gegensatz zu /linuxrcoder /sbin/initin diesem Modus ausgeführt wird.