Emulate Rpi with QEMU fails

Hi,
I’m trying to emulate Rpi with QEMU.
I found this arcticle in Raspberry Pi Geek documenting the steps including persistent storage on host.

However when starting the emulation with command

qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -serial stdio -hda DietPi_RPi-ARMv6-Buster.img -net "user,hostfwd=tcp::5022-:22" -dtb versatile-pb-buster.dtb -kernel kernel-qemu-5.4.51-buster -append "root=/dev/sda2 rootfstype=ext4 rw panic=1" -no-reboot

I get this error:

VFS: Cannot open root device "sda2" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
0100            4096 ram0 
 (driver?)
0101            4096 ram1 
 (driver?)
0102            4096 ram2 
 (driver?)
0103            4096 ram3 
 (driver?)
0104            4096 ram4 
 (driver?)
0105            4096 ram5 
 (driver?)
0106            4096 ram6 
 (driver?)
0107            4096 ram7 
 (driver?)
0108            4096 ram8 
 (driver?)
0109            4096 ram9 
 (driver?)
010a            4096 ram10 
 (driver?)
010b            4096 ram11 
 (driver?)
010c            4096 ram12 
 (driver?)
010d            4096 ram13 
 (driver?)
010e            4096 ram14 
 (driver?)
010f            4096 ram15 
 (driver?)
1f00           65536 mtdblock0 
 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

I assume this is related to the content in fstab of RaspiOS:

# Please use "dietpi-drive_manager" to setup mounts
#----------------------------------------------------------------
# NETWORK
#----------------------------------------------------------------


#----------------------------------------------------------------
# TMPFS
#----------------------------------------------------------------
tmpfs /tmp tmpfs noatime,lazytime,nodev,nosuid,mode=1777
tmpfs /var/log tmpfs size=50M,noatime,lazytime,nodev,nosuid,mode=1777

#----------------------------------------------------------------
# MISC: ecryptfs, vboxsf (VirtualBox shared folder), gluster, bind mounts
#----------------------------------------------------------------


#----------------------------------------------------------------
# SWAPFILE
#----------------------------------------------------------------


#----------------------------------------------------------------
# PHYSICAL DRIVES
#----------------------------------------------------------------
PARTUUID=907af7d0-02 / auto noatime,lazytime,rw 0 1
PARTUUID=907af7d0-01 /boot auto noatime,lazytime,rw 0 2

Can you please advise how to fix this error?

THX

Hi,

many thanks for your message. I guess you are using incorrect location for rootFS. It is specified to be located at an external HDD /dev/sda2

"root=/dev/sda2 rootfstype=ext4 rw panic=1"

But this doesn’t seems to exist as you have following error message

VFS: Cannot open root device "sda2"

You can check available devices running

lsblk -o name,fstype,label,size,ro,type,mountpoint

In the meantime I overcome this issue.
I found a Github repo documenting a different command for starting QEMU:

qemu-system-arm -serial stdio -M versatilepb -cpu arm1176 -m 256 -drive "file=DietPi_RPi-ARMv6-Buster.img,if=none,index=0,media=disk,format=raw,id=disk0" -device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" -net "user,hostfwd=tcp::5022-:22" -dtb /home/thomas/Hardware/Raspi/versatile-pb-buster.dtb -kernel kernel-qemu-5.4.51-buster -append "root=/dev/vda2 panic=1 rw" -no-reboot

Unfortunately the emulated Rpi has no network connection, but this is a different issue.

ah one thing that stepped into my mind as well, you might need to resize the DietPi image before using it on QEMU

74cmonty
did you got it working in meantime and solved the problem with the missing network interface?