Ce qui se passe, c'est que vous essayez de démarrer Linux de manière "obsolète". C'est là que se initrdtrouve un ramdisk par opposition à une archive cpio compressée décompressée par le noyau dans un ramfs, et avec l'ancienne façon de basculer vers le périphérique final.
Dans ce mode, le noyau monte le disk.img en tant que disque virtuel en tant que système de fichiers racine, puis s'exécute /linuxrcdedans. Très probablement dans votre cas, il n'y a pas un tel fichier. Lorsque /linuxrc(qui est censé faire tout ce qui est nécessaire pour afficher le périphérique de blocage pour le système de fichiers racine réel) se ferme, le noyau monte le véritable système de fichiers racine.
Les messages ci-dessus montrent qu'il monte correctement le disque RAM (1,0: 1 est pour ram, donc /dev/ram0) mais pas le vrai système de fichiers racine / dev / sda1 (8,1: 8 est sd, 1 est a1). Vraisemblablement, puisque vous n'avez pas spécifié de ligne de commande du noyau ( -append), cela /dev/sda1provient d'une CONFIG_CMDLINE passée au moment de la compilation du noyau ou de l'utilisation rdev.
Si votre disk.img est censé contenir un système de fichiers racine, disons une petite distribution Linux avec /sbin/init..., alors vous voudrez probablement l'écrire à la place:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
Ensuite, le noyau traiterait le disque RAM comme le véritable système de fichiers racine (bien que vous puissiez toujours pivot_rooten utiliser un autre).
Pour pouvoir voir les messages du noyau plus facilement, je recommande d'utiliser la sortie série:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
Comme alternative, vous pouvez utiliser un ramfs init au lieu d'un disque ram init:
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
(fourni busyboxest la version liée statiquement) et vous obtiendrez un shell et d'autres utilitaires busybox dans ce noyau).
Notez que le noyau fonctionne désormais /initpar opposition à /linuxrcou /sbin/initdans ce mode.