Raspberry-Pi

模擬 ARM v8 在使用者空間軟體的 qemu 中執行 DietPi

  • September 6, 2022

我似乎無法讓DietPi在qemu的通用 ARM 64 位virt機器上啟動。我正在使用 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

DietPicmdline.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...

這篇文章似乎有答案。基於此,我可以像這樣啟動 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嗎?試圖調查,但我根本無法獲得控制台訪問權限,所以沒有網路我似乎是 SOL。


更新 2 *:我遇到的問題似乎完全是由於“dietpi”圖像。如果我只使用Raspberry Pi OS 64bit 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

引用自:https://unix.stackexchange.com/questions/716226