私はラズベリーパイモデル3用のyoctoイメージを作成し、それをQemuで実行したいと思います。ビルドプロセスはうまく機能します。イメージをSDカードにフラッシュするのではなく、core-image-minimal
マシン用にビルドすると、期待どおりにコンソールから起動できます。raspberry3-64
qemuarm
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
修正する:
誰もが同じことを試した場合。runqemu
yocto環境では実行できません。ついに効果があったのは手動でインストールして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私の雇用主が販売する)。