Ce qui se passe, c'est que vous essayez de démarrer Linux de manière "obsolète". C'est là que se initrd
trouve 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 /linuxrc
dedans. 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/sda1
provient 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_root
en 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 busybox
est 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 /init
par opposition à /linuxrc
ou /sbin/init
dans ce mode.