何が起こっているのかというと、Linuxを「廃止された」方法で起動しようとしているということです。これはinitrd、ramfsでカーネルによって解凍された圧縮されたcpioアーカイブとは対照的にramdiskであり、古い方法でエンドデバイスに切り替える方法です。
そのモードでは、カーネルはdisk.imgをルートファイルシステムとしてramdiskとしてマウントし、そこで実行/linuxrcします。おそらくあなたのケースでは、そのようなファイルはありません。ときに/linuxrc終了し、(実際のルートファイルシステム用のブロックデバイスを起動する必要がありますものは何でもすると想定される)は、カーネルは、実際のルートファイルシステムをマウントします。
上記のメッセージは、RAMディスクを正常にマウントしている(1,0:1はramなので/dev/ram0)が、実際のルートファイルシステム/ dev / sda1 はマウントしていないことを示しています(8,1:8はsd、1はa1)。おそらく、カーネルコマンドライン(-append)を指定しなかったため/dev/sda1、カーネルのコンパイル時またはを使用して渡されたCONFIG_CMDLINEから取得されますrdev。
disk.imgが/sbin/init...などの小さなLinuxディストリビューションのルートファイルシステムを含むことを意図している場合は、おそらく代わりに次のように記述します。
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
次に、カーネルはramディスクを実際のルートファイルシステムとして扱います(ただしpivot_root、別のファイルシステムを使用することもできます)。
カーネルメッセージをより簡単に確認できるように、シリアル出力を使用することをお勧めします。
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
別の方法として、init ramdiskの代わりにinit ramfsを使用できます。
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
(提供されるのbusyboxは、静的にリンクされたバージョンです)。そのカーネルには、シェルと他のbusyboxユーティリティが含まれます)。
カーネルがそのモード/initとは対照的に、/linuxrcまたは/sbin/initそのモードで実行されることに注意してください。