Olan şu ki, Linux'u "Eskimiş" şekilde başlatmaya çalışıyorsunuz. Bu, initrd
bir 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/ram0
ancak) 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_root
de 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
( busybox
statik 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 /init
aksine /linuxrc
veya /sbin/init
bu modda çalıştığını unutmayın .