何が起こっているのかというと、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
そのモードで実行されることに注意してください。