You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto中使用QEMU构建NanoPi NEO Air镜像及运行

用QEMU运行Yocto构建的NanoPi NEO Air镜像方案

好的,我来帮你搞定这个问题,要让Yocto构建的NanoPi NEO Air镜像在QEMU里跑起来,需要分几步调整配置、适配内核,最后再启动QEMU,具体如下:

1. 调整Yocto构建配置,启用QEMU支持

首先打开你Yocto构建目录下的build/conf/local.conf,添加以下配置项:

  • 启用虚拟化和QEMU相关特性:
    DISTRO_FEATURES += "virtualization qemu"
    
  • 让镜像包含QEMU工具(如果需要在镜像内部运行用户态QEMU的话):
    CORE_IMAGE_EXTRA_INSTALL += "qemu qemu-system-arm"
    
  • 生成QEMU友好的磁盘镜像格式(qcow2比raw更适合虚拟机):
    IMAGE_FSTYPES += "qcow2"
    
  • 可选:启用内核调试符号和串口输出,方便调试:
    KERNEL_DEBUG = "1"
    SERIAL_CONSOLES = "115200;ttyAMA0"
    

2. 适配内核以支持QEMU虚拟硬件

NanoPi NEO Air的默认内核是针对真实全志H3硬件编译的,缺少QEMU虚拟设备的驱动,需要调整内核配置:

方法一:通过menuconfig手动配置

执行以下命令打开内核配置界面:

bitbake -c menuconfig linux-sunxi

在界面中找到并启用以下选项:

  • Device Drivers -> Block devices -> Virtio block driver support
  • Device Drivers -> Network device support -> Virtio network driver
  • Device Drivers -> Character devices -> Virtio console
  • Device Drivers -> Virtio drivers -> Generic virtio bus
  • Device Drivers -> Virtio drivers -> Virtio MMIO driver

保存配置后,执行以下命令保存默认配置,后续构建会自动沿用:

bitbake -c savedefconfig linux-sunxi

方法二:通过bbappend文件自动配置

如果不想每次手动配置,可以创建内核配方的追加文件:

  1. 在你的layer里创建recipes-kernel/linux/linux-sunxi_%.bbappend文件,内容如下:
    FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
    SRC_URI += "file://qemu-virtio.cfg"
    
  2. 在同目录下创建files/qemu-virtio.cfg文件,添加以下内核配置项:
    CONFIG_VIRTIO=y
    CONFIG_VIRTIO_BLK=y
    CONFIG_VIRTIO_NET=y
    CONFIG_VIRTIO_CONSOLE=y
    CONFIG_VIRTIO_MMIO=y
    

这样后续构建内核时会自动启用这些QEMU虚拟设备驱动。

3. 重新构建镜像

完成上述配置后,重新执行构建命令(这里以core-image-minimal为例,你可以换成自己用的镜像配方):

bitbake core-image-minimal

构建完成后,镜像文件会生成在tmp/deploy/images/nanopi-neo-air/目录下,你需要用到这几个文件:

  • core-image-minimal-nanopi-neo-air.rootfs.qcow2:磁盘镜像
  • zImage:内核文件
  • sun8i-h3-nanopi-neo-air.dtb:设备树文件

4. 在QEMU中启动镜像

使用以下命令启动QEMU(注意替换成你的实际路径和镜像名称):

qemu-system-arm \
    -M vexpress-a9 \
    -cpu cortex-a7 \
    -m 512 \
    -drive file=tmp/deploy/images/nanopi-neo-air/core-image-minimal-nanopi-neo-air.rootfs.qcow2,if=sd,format=qcow2 \
    -kernel tmp/deploy/images/nanopi-neo-air/zImage \
    -dtb tmp/deploy/images/nanopi-neo-air/sun8i-h3-nanopi-neo-air.dtb \
    -append "root=/dev/mmcblk0p1 rw console=ttyAMA0,115200 rootwait" \
    -serial stdio \
    -net nic,model=virtio \
    -net user,hostfwd=tcp::2222-:22

参数说明:

  • -M vexpress-a9:指定QEMU模拟的通用armv7机器(QEMU对全志H3直接模拟支持有限,vexpress-a9兼容性更好)
  • -cpu cortex-a7:模拟NanoPi NEO Air的Cortex-A7核心
  • -m 512:分配512MB内存(和真实设备一致)
  • -drive:挂载生成的qcow2镜像作为虚拟SD卡
  • -kernel/-dtb:指定Yocto构建的内核和设备树
  • -append:内核启动参数,指定根分区、串口控制台
  • -serial stdio:将串口输出重定向到终端,方便查看启动日志
  • -net:配置虚拟网络,把主机的2222端口映射到镜像的22端口,方便后续用SSH连接

常见问题排查:

  • 如果启动后无法挂载根文件系统,可以尝试把root=/dev/mmcblk0p1换成root=/dev/vda1(如果使用virtio块设备),同时确保内核已启用virtio块驱动。
  • 如果没有网络,检查内核是否启用了virtio网络驱动,或者调整-net nic的model参数为rtl8139试试。

内容的提问来源于stack exchange,提问作者Mohammed Harris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:46:11