저는 라즈베리 파이 모델 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를 직접 지정하세요.구글링해서 이거 찾았는데:
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내 고용주가 판매함).