To, co się dzieje, polega na tym, że próbujesz uruchomić system Linux w sposób „przestarzały”. To właśnie tam initrdjest ramdysk w przeciwieństwie do skompresowanego archiwum CPIO rozpakowanego przez jądro w ramfs i przy starym sposobie przełączania się na urządzenie końcowe.
W tym trybie jądro montuje plik disk.img jako ramdysk jako główny system plików, a następnie wykonuje się /linuxrctam. Najprawdopodobniej w twoim przypadku nie ma takiego pliku. Kiedy /linuxrc(co ma zrobić wszystko, co konieczne, aby uruchomić urządzenie blokujące dla prawdziwego głównego systemu plików) kończy pracę, jądro montuje prawdziwy główny system plików.
Powyższe komunikaty pokazują, że pomyślnie zamontował dysk RAM (1,0: 1 dla ram, więc /dev/ram0), ale nie prawdziwy system plików root / dev / sda1 (8,1: 8 oznacza sd, 1 oznacza a1). Prawdopodobnie, ponieważ nie określono wiersza polecenia jądra ( -append), który /dev/sda1pochodzi z CONFIG_CMDLINE przekazanej podczas kompilacji jądra lub przy użyciu rdev.
Jeśli twój disk.img ma zawierać główny system plików, powiedzmy małą dystrybucję Linuksa z /sbin/init..., prawdopodobnie prawdopodobnie chcesz go napisać:
kvm -kernel kernel.img -initrd disk.img -append 'root=/dev/ram0`
Następnie jądro traktowałoby dysk RAM jako prawdziwy główny system plików (choć nadal można by go użyć pivot_rootdo innego).
Aby móc łatwiej zobaczyć komunikaty jądra, polecam użycie wyjścia szeregowego:
kvm -kernel kernel.img -initrd disk.img -nographic -append "root=/dev/ram0 console=ttyS0"
Alternatywnie możesz użyć ramfs init zamiast ramdisk init:
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
(pod warunkiem, że busyboxjest to wersja statycznie powiązana), w tym jądrze otrzymasz powłokę i inne narzędzia typu busybox).
Zauważ, że jądro działa teraz /initw przeciwieństwie do tego trybu /linuxrclub /sbin/initw tym trybie.