Olan şu ki, Linux'u "Eskimiş" şekilde başlatmaya çalışıyorsunuz. Bu, initrdbir ramfs içinde çekirdek tarafından paketlenmiş sıkıştırılmış bir cpio arşivinin aksine ve son aygıta geçmenin eski yolunun bir ramdisk olduğu yerdir .
Bu modda çekirdek, disk.img dosyasını kök dosya sistemi olarak ramdisk olarak bağlar ve ardından burada yürütülür /linuxrc. Büyük ihtimalle sizin durumunuzda böyle bir dosya yok. Ne zaman /linuxrcçıkışlar, (gerçek kök dosya sistemi için blok aygıtı getirmek için gerekli her şeyi yapma gerekiyordu) ardından çekirdek gerçek kök dosya sistemini bağlar.
Yukarıdaki mesajlar, ram diskini başarılı bir şekilde bağladığını (1,0: 1 içindir ram, /dev/ram0ancak) gerçek kök dosya sistemi / dev / sda1'i (8,1: 8 sd, 1'dir a1) göstermektedir. Muhtemelen bir çekirdek komut satırı ( -append) belirtmediğiniz için /dev/sda1, çekirdek derleme zamanında veya kullanarak bir CONFIG_CMDLINE'dan gelir rdev.
Disk.img'iniz /sbin/init... ile küçük bir Linux dağıtımı diyelim bir kök dosya sistemi içeriyorsa , bunun yerine muhtemelen yazmak istersiniz:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
Daha sonra çekirdek, ram diskine gerçek kök dosya sistemi gibi davranır (yine pivot_rootde başka bir tanesine olabilir).
Çekirdek mesajlarını daha kolay görebilmek için seri çıktıyı kullanmanızı tavsiye ederim:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
Alternatif olarak, init ramdisk yerine init ramfs kullanabilirsiniz:
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
( busyboxstatik olarak bağlı sürümdür) ve o çekirdekteki bir kabuk ve diğer meşgul kutusu yardımcı programlarını alırsınız).
Çekirdeğin artık bu modun /initaksine /linuxrcveya /sbin/initbu modda çalıştığını unutmayın .