qemu配合buildroot仿真orangepi pc(全志H3)
qemu 5.1已经支持珠海全志的a10 H3两个芯片,本文的qemu用法参考自:
https://qemu.readthedocs.io/en/latest/system/arm/orangepi.html
buildroot用法:
cd buildroot-2020.11 make orangepi_pc_defconfig 在 .config 末尾加上两行,我们要用qemu。或者make menuconfig,到host utilitils里面开启qemu,以及qemu system mode BR2_PACKAGE_HOST_QEMU=y BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y make 如果提示某些qemu的设置,直接回车默认就行。 等待编译完成
编译完后,会有qemu:output/host/bin/qemu-system-arm
output/image下是编译输出文件: 新建一个shell脚本:start-qemu.sh
. ├── boot.scr ├── boot.vfat ├── rootfs.ext2 ├── rootfs.ext4 -> rootfs.ext2 ├── sdcard.img ├── start-qemu.sh ├── sun8i-h3-orangepi-pc.dtb ├── u-boot.bin ├── u-boot-sunxi-with-spl.bin └── zImage
start-qemu.sh:
#!/bin/sh
IMAGE_DIR="${0%/*}/"
export PATH="/home/fei/buildroot-2020.11.1/output/host/bin:${PATH}"
# dtc -I dtb -O dts sun8i-h3-orangepi-pc.dtb -o all.dts #反编译设备树
# qemu-img resize -f raw --shrink ${IMAGE_DIR}/rootfs.ext2 64M
# qemu-img resize -f raw --shrink ${IMAGE_DIR}/sdcard.img 128M #扩容成sd卡要求的标准尺寸
#方式1
qemu-system-arm \
-M orangepi-pc \
-m 1G \
-nographic \
-sd sdcard.img
# -gdb tcp::12451 \
# -S \
#方式2
#qemu-system-arm \
# -M orangepi-pc \
# -m 1G \
# -nographic \
# -kernel ${IMAGE_DIR}/zImage \
# -dtb ${IMAGE_DIR}/sun8i-h3-orangepi-pc.dtb \
# -drive file=${IMAGE_DIR}/rootfs.ext2,if=sd,format=raw \
# -append "console=ttyS0,115200 rootwait root=/dev/mmcblk0" \
# # -gdb tcp::12451 \
# # -S \
方式1 从sdcard.img完整启动,包括u-boot
方式2 只有kernel和rootfs,bootloader使用qemu默认自带的orangepi bootloader
gdb调试kernel,需要在menuconfig时,打开toolchain----》gdb,可以参考我另一篇文章。 orangepi-pc可以在qemu的源码中找到实现: output/build/host-qemu-5.1.0/hw/arm/orangepi.c output/build/host-qemu-5.1.0/hw/arm/allwinner-h3.c 部分功能比如sdcard usb是实现了,大部分外设没有实现。 const hwaddr allwinner_h3_memmap[] = { ... } struct AwH3Unimplemented { const char *device_name; hwaddr base; hwaddr size; } unimplemented[] = {