Yocto QEMUがん画像

Yocto QEMUがん画像

私はラズベリーパイモデル3用のyoctoイメージを作成し、それをQemuで実行したいと思います。ビルドプロセスはうまく機能します。イメージをSDカードにフラッシュするのではなく、core-image-minimalマシン用にビルドすると、期待どおりにコンソールから起動できます。raspberry3-64qemuarm

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が、結果は同じですね。変更するたびにSDカードを更新する必要がないように、qemuを使用してイメージをエミュレートするには何を変更する必要がありますか?

私のホストシステムは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

修正する:

誰もが同じことを試した場合。runqemuyocto環境では実行できません。ついに効果があったのは手動でインストールして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ビットPiとは異なります。

代わりにQEMUを直接使用してください。qemu-system-arm -M ?リストを確認raspi3bし、コア、DT、SDを直接指定してください。Googleでこれを見つけました。:

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私の雇用主が販売する)。

関連情報