Yocto QEMU 手臂图像

Yocto QEMU 手臂图像

我已经为树莓派 3 型构建了 yocto 映像,我想在 Qemu 中运行它。构建过程运行core-image-minimal良好,如果我为机器构建它raspberry3-64而不是qemuarm将映像闪存到 SD 卡,我可以按预期启动到控制台。

build git:(dunfell) bitbake core-image-base   
WARNING: Host distribution "ubuntu-22.04" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |############################################| Time: 0:00:01
Loaded 3298 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION           = "1.46.0"
BUILD_SYS            = "x86_64-linux"
NATIVELSBSTRING      = "universal"
TARGET_SYS           = "arm-poky-linux-gnueab"
MACHINE              = "qemux86-64"
DISTRO               = "poky"
DISTRO_VERSION       = "3.1.22"
TUNE_FEATURES        = "arm armv7ve vfp thumb neon callconvention-hard"
TARGET_FPU           = "hard"
meta                 
meta-poky            
meta-yocto-bsp       = "dunfell:6b8a307b7843af23d189d7ffcecf32c05afac850"
meta-oe              
meta-python          
meta-multimedia      
meta-networking      = "dunfell:e707e9b7cf5c62bff4fee029965a87b22dd4ccba"
meta-raspberrypi     = "dunfell:2081e1bb9a44025db7297bfd5d024977d42191ed"

Initialising tasks: 100% |#######################################| Time: 0:00:02
Checking sstate mirror object availability: 100% |###############| Time: 0:04:40
Sstate summary: Wanted 836 Found 7 Missed 829 Current 355 (0% match, 30% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 3162 tasks of which 1267 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING message shown.

但是当我尝试在 qemu 中运行这个图像时,它似乎不起作用......

➜  build git:(dunfell) runqemu core-image-base
runqemu - INFO - Running bitbake -e ...
runqemu - INFO - Continuing with the following parameters:
KERNEL: [/home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/deploy/images/qemuarm/bzImage]
MACHINE: [qemuarm]
FSTYPE: [ext4]
ROOTFS: [/home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/deploy/images/qemuarm/core-image-base-qemuarm.ext4]
CONFFILE: [/home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/deploy/images/qemuarm/core-image-base-qemuarm.qemuboot.conf]

runqemu - INFO - Setting up tap interface under sudo
[sudo] password for wtech: 
runqemu - INFO - Network configuration: ip=192.168.7.2::192.168.7.1:255.255.255.0
runqemu - INFO - Running /home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/qemu-system-arm -device virtio-net-device,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -drive id=disk0,file=/home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/deploy/images/qemuarm/core-image-base-qemuarm.ext4,if=none,format=raw -device virtio-blk-device,drive=disk0 -show-cursor -device VGA,edid=on -device qemu-xhci -device usb-tablet -device usb-kbd -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0  -machine virt,highmem=off -cpu cortex-a15 -m 256 -serial mon:vc -serial null -kernel /home/wtech/Workspace/rpi-yocto/poky-dunfell/build/tmp/deploy/images/qemuarm/zImage -append 'root=/dev/vda rw  mem=256M ip=192.168.7.2::192.168.7.1:255.255.255.0 console=ttyAMA0 '

之后就没有任何进展了。我也尝试过构建,qemux86_64但结果是一样的。我需要更改什么才能使用 qemu 模拟图像,这样我就不必为每次更改都刷新 SD 卡?

我的主机系统是虚拟化(VirtualBox)Ubutu 22.04

更新:如果它添加任何信息,这是挂起ps -la时的输出runqemu

~ ps -la
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000    1097    1091  0  80   0 - 57920 do_pol tty2     00:00:00 gnome-session-b
0 S  1000    2338    1811  0  80   0 -  8634 do_wai pts/0    00:00:00 python3
2 R  1000    2399    2338 89  80   0 - 311794 -     pts/0    00:00:09 qemu-system-arm 
0 R  1000    2434    2081  0  80   0 -  5331 -      pts/1    00:00:00 ps

更新:

万一有人尝试过同样的事情。我无法在 yoctorunqemu环境中运行它。最终有效的是手动安装qemu-system-aarch64并运行构建

qemu-system-aarch64 \
-M virt -cpu cortex-a57 \
-kernel tmp/deploy/images/qemuarm64/Image--5.4.228+gitAUTOINC+b00c12ce7a_2bd8ca7c09-r0-qemuarm64-20230208202924.bin \
-append "root=/dev/vda rw mem=512M earlyprintk console=ttyAMA0,115200" \
-drive id=disk0,file=tmp/deploy/images/qemuarm64/core-image-base-qemuarm64-20230215193657.rootfs.ext4,format=raw,if=none \
-smp 4 \ 
-device virtio-blk-device,drive=disk0 -device qemu-xhci \
-serial mon:vc -serial null \
-display sdl,gl=on \
-device virtio-rng-pci,rng=rng0 \
-object rng-random,filename=/dev/urandom,id=rng0

答案1

Yocto qemuarm 图像适用于 ARM926EJ-S 多功能板。 runqemu 将配置 QEMU 以准确模拟该板。这与 Raspberry Pi 不同,尤其是 64 位的。

相反,直接使用 QEMU 即可。检查该qemu-system-arm -M ?列表raspi3b,然后直接指定内核、DT 和 SD。谷歌搜索我发现了这个:

qemu-system-aarch64 \
    -M raspi3b \
    -cpu cortex-a72 \
    -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" \
    -dtb bcm2710-rpi-3-b-plus.dtb \
    -sd disk.img \
    -kernel kernel8.img \
    -m 1G -smp 4 \
    -serial stdio \
    -usb -device usb-mouse -device usb-kbd \
    -device usb-net,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::5555-:22

不过,我还没有发现 QEMU 对于嵌入式开发非常有用。要么您有一些可以在本地为 Linux 设置进行良好隔离的东西,要么您有一些特定于硬件的东西,您希望在实际硬件上而不是在不完整的仿真上进行测试。对于自动化测试来说,这确实很好。

对于缓慢迭代的问题,请考虑从共享介质启动,例如通过网络或从可复用的 SD 卡(例如https://www.linux-automation.com/en/products/usb-sd-mux.html我的雇主出售的)。

相关内容