Apa yang terjadi adalah Anda mencoba mem-boot Linux dengan cara "Usang". Di situlah initrd
ramdisk 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 /linuxrc
di 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/sda1
berasal 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_root
ke 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 busybox
adalah versi yang terhubung secara statis) dan Anda akan mendapatkan shell dan utilitas busybox lainnya di kernel itu).
Perhatikan bahwa kernel sekarang berjalan /init
sebagai lawan /linuxrc
atau /sbin/init
dalam mode itu.