Apa yang terjadi adalah Anda mencoba mem-boot Linux dengan cara "Usang". Di situlah initrdramdisk bukan arsip cpio terkompresi yang dibongkar oleh kernel dalam ramfs, dan dengan cara lama untuk beralih ke perangkat akhir.
Dalam mode itu, kernel memasang disk.img sebagai ramdisk sebagai sistem file root dan kemudian dijalankan /linuxrcdi sana. Kemungkinan besar dalam kasus Anda, tidak ada file seperti itu. Ketika /linuxrc(yang seharusnya melakukan apa pun yang diperlukan untuk membuka perangkat blok untuk filesystem root sebenarnya) keluar, maka kernel mount sistem file root nyata.
Pesan di atas menunjukkan bahwa ia berhasil memasang ram ram (1,0: 1 untuk ram, jadi /dev/ram0) tetapi bukan sistem file root sebenarnya / dev / sda1 (8,1: 8 adalah sd, 1 adalah a1). Mungkin karena Anda tidak menentukan baris perintah kernel ( -append), yang /dev/sda1berasal dari CONFIG_CMDLINE yang dikirimkan pada waktu kompilasi kernel atau menggunakan rdev.
Jika disk.img Anda dimaksudkan untuk berisi sistem file root dari katakanlah distribusi Linux kecil dengan /sbin/init..., maka Anda mungkin ingin menulisnya sebagai gantinya:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
Kemudian, kernel akan memperlakukan ram disk sebagai sistem file root yang sebenarnya (meskipun Anda masih bisa pivot_rootke yang lain).
Agar dapat melihat pesan kernel dengan lebih mudah, saya sarankan menggunakan keluaran serial:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
Sebagai alternatif, Anda bisa menggunakan init ramfs alih-alih init ramdisk:
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
(disediakan busyboxadalah versi yang terhubung secara statis) dan Anda akan mendapatkan shell dan utilitas busybox lainnya di kernel itu).
Perhatikan bahwa kernel sekarang berjalan /initsebagai lawan /linuxrcatau /sbin/initdalam mode itu.