模拟 ARM v8 在 qemu 中运行 DietPi 用于用户空间软件

模拟 ARM v8 在 qemu 中运行 DietPi 用于用户空间软件

我似乎无法得到迪特皮virt在通用 ARM 64 位机器上启动盖姆。我正在使用 Raspberry Pi ARMv8 64 位 DietPi 映像(适用于 Raspberry Pi 4)。

我缺少/需要更改什么才能让 DietPi 在模拟中运行以进行用户空间软件开发?

我已经提取了内核、设备树和命令行。/etc/fstab映像的使用分区 UUID :

$ cat /mnt/rpi/etc/fstab 
#----------------------------------------------------------------
# TMPFS
#----------------------------------------------------------------
tmpfs /tmp tmpfs noatime,lazytime,nodev,nosuid,mode=1777
tmpfs /var/log tmpfs size=50M,noatime,lazytime,nodev,nosuid,mode=1777
#----------------------------------------------------------------
# PHYSICAL DRIVES
#----------------------------------------------------------------
PARTUUID=df909cde-02 / ext4 noatime,lazytime,rw 0 1
PARTUUID=df909cde-01 /boot vfat noatime,lazytime,rw 0 2

DietPi自带cmdline.txt的是:

root=PARTUUID=df909cde-02 rootfstype=ext4 rootwait fsck.repair=yes net.ifnames=0 logo.nologo console=serial0,115200 console=tty1

我在启动过程中获得的最远的是这个qemu-system-aarch64调用,它最终挂在Waiting for root device PARTUUID...

qemu-system-aarch64 \
    -M virt \
    -cpu cortex-a72 \
    -m 256 \
    -kernel kernel8.img \
    -drive file=DietPi_RPi-ARMv8-Bullseye.img \
    -append "root=PARTUUID=df909cde-02 rootfstype=ext4 rootwait fsck.repair=yes
 net.ifnames=0 logo.nologo" \
    -no-reboot \
    -serial stdio
[    0.827340] Initializing XFRM netlink socket 
[    0.827593] NET: Registered PF_PACKET protocol family
[    0.828221] Key type dns_resolver registered 
[    0.829502] registered taskstats version 1
[    0.829662] Loading compiled-in X.509 certificates
[    0.830795] Key type ._fscrypt registered
[    0.830908] Key type .fscrypt registered
[    0.830998] Key type fscrypt-provisioning registered
[    0.834275] of_cfs_init
[    0.835387] of_cfs_init: OK
[    0.843886] uart-pl011 9000000.pl011: no DMA platform data
[    0.846894] Waiting for root device PARTUUID=df909cde-02...

答案1

这个帖子似乎已经有了答案。基于此,我可以像这样启动 ARMv8 映像(在复制kernel8.imgbcm2710-rpi-3-b.dtb从映像中复制出来之后):

qemu-system-aarch64 \
    -m 1024 \
    -M raspi3 \
    -kernel kernel8.img \
    -dtb bcm2710-rpi-3-b.dtb \
    -drive file=DietPi_RPi-ARMv8-Bullseye.img,format=raw \
    -append "console=ttyAMA0 root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4" \
    -device usb-net,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::2222-:22 \
    -serial stdio

启动没有问题,但我无法访问控制台。不过,我可以使用 ssh 登录:

$ ssh -p 2222 root@localhost
Warning: Permanently added '[localhost]:2222' (ED25519) to the list of known hosts.
root@localhost's password:

输入默认密码 ( dietpi),即可完成设置。 DietPi 希望在您首次登录时运行一堆初始化脚本,但之后一切似乎都按预期工作。


更新1:嗯,一次,直到重新启动。 Dietpi 在初始配置后会禁用 ssh 吗?试图进行调查,但我根本无法访问控制台,因此如果没有网络,我似乎无法正常工作。


更新2*:我遇到的问题似乎完全是由于“dietpi”图像造成的。如果我只是使用Raspberry Pi 操作系统 64 位 Lite 映像,然后控制台访问就可以正常工作了。

“用户”模式网络似乎无法在重新启动后继续存在,但设置分路设备效果很好。

这就是我最终使用的命令行:

qemu-system-aarch64 \
  -M raspi3 \
  -kernel kernel8.img \
  -append "root=/dev/mmcblk0p2 rw rootwait rootfstype=ext4 console=ttyAMA0" \
  -dtb bcm2710-rpi-3-b-plus.dtb \
  -m 1024 \
  -drive file=/var/lib/libvirt/images/raspios-work.img,format=raw \
  -netdev tap,id=net0,script=no,downscript=no,ifname=rpi0 \
  -device usb-net,netdev=net0 \
  -nographic \
  -serial mon:stdio

相关内容