☰
开源 QEMU:不用板子也能跑嵌入式系统
2026/10/8 22:41:48 网站建设 项目流程

做嵌入式,最怕两件事叠在一起:板子还没到,以及板子到了却烧录、接线、串口抢资源。CI 流水线更头疼——不可能给每个提交搞一块开发板。于是很多人会问:能不能在电脑里「假装」有一台 ARM / RISC-V 机器,把内核、根文件系统、甚至裸机固件先跑起来?

QEMU(Quick Emulator)就是干这个的:一套通用的开源机器模拟器 / 虚拟化器。它可以在你的 PC 上模拟完整计算机(CPU、内存、串口、网卡、Flash……),也可以在加速模式下接近原生速度跑虚拟机。对嵌入式开发者来说,它常常是「没板也能验证」的第一块踏板。

截至 2026 年 9 月,官网维护发布里较新的稳定版本为11.1.2(以 qemu.org/download 实时列表为准)。

  • 官网:https://www.qemu.org
  • 文档:https://www.qemu.org/documentation
  • 源码镜像:github.com/qemu/qemu(正式投稿与发布说明请看官网)
  • 许可:以仓库 LICENSE 为准(多为 GPL-2.0 等组合,产品使用请自行核对)

一、它到底是什么

名字有时被念成「Q-EMU」,项目定位写得很直白:a generic and open source machine emulator and virtualizer。

你可以把它理解成三种能力叠在一起:

能力在干什么嵌入式里常怎么用
全系统模拟模拟一整台机器,启动 Guest OS / 固件跑 ARM Linux、测启动脚本、联调用户态
用户态模拟不模拟整机,只翻译「另一种 CPU 的程序」在 x86 电脑上跑arm-linux-gnu编出来的二进制
虚拟化加速同架构时借 KVM 等接近原生速度服务器 / 桌面虚拟机(和嵌入式仿真是两条常用路)

它不是 IDE,也不是交叉编译器。交叉工具链负责编出镜像;QEMU 负责在假机器上跑起来。两边经常成对出现:aarch64-linux-gnu-gcc编译 →qemu-system-aarch64启动。

等真机只用交叉编译QEMU
能否执行能,但依赖硬件到货只能看「编过了」能执行、能看串口日志
外设真实无模拟常见串口/网卡/存储等
CI难规模化容易但测不深易挂进流水线做冒烟
速度真机快慢看板子—纯模拟偏慢;同架构+KVM 很快

二、三个常见误解

≠ 和 VirtualBox / VMware 是同一种东西。
消费级虚拟机产品偏「在 x86 上再开一台 x86 Windows/Linux」。QEMU 更通用:强调跨架构模拟(比如在 x86 笔记本上跑 ARM 机器),也可以配合 KVM 做高性能虚拟化。嵌入式文档里你更常碰到的是qemu-system-arm/qemu-system-riscv64这类命令。

≠ 模拟了就等于板上行为 100% 一致。
定时精度、Wi‑Fi/射频、特殊加速器、厂封 NPU、奇葩 Flash 时序——模拟机和真机总会有缝。QEMU 适合启动、驱动框架、文件系统、网络协议栈、应用逻辑的早期验证;量产标定、射频、极限时序仍要上真机。

≠ 「装了 QEMU 就会自动有板级支持」。
你要选对machine(机器型号)和CPU,还要有能在该机器上启动的镜像(内核 + rootfs,或带设备树的 zImage 等)。Zephyr、Linux、Buildroot、Yocto 文档里通常会写「推荐的 QEMU board / virt 机器」——按文档配对,比自己瞎猜-M参数省事。

三、架构:宿主机上跑一台假电脑

从下往上看,一次「跑起来」大致是这样:

层干什么
宿主机 OSLinux / macOS / Windows,提供进程、文件、真网卡
QEMU翻译或加速 Guest 指令;模拟内存与外设模型
虚拟机器你选的-M机器:UART、GIC、PCI、virtio 等
GuestLinux、RTOS、U-Boot、甚至裸机 demo

全系统模式下,Guest 以为自己在操作真实硬件;其实读写的是 QEMU 实现的外设模型。串口常常接到你终端的 stdio,所以「板子上的 printk」会直接打在你笔记本黑窗口里——这是嵌入式同学最有体感的一刻。

TCG vs KVM(知道即可):

  • TCG(Tiny Code Generator):把 Guest 指令动态翻译成宿主机指令,跨架构靠它,灵活但更慢。
  • KVM(Linux):Guest 与宿主机同架构时,让 CPU 硬件虚拟化接力,快很多。
    嵌入式跨架构仿真,多半走 TCG;在 x86 服务器上开 x86 虚拟机,多半走 KVM。

四、嵌入式场景里它常出现在哪

场景你在干什么
没板先跑 LinuxBuildroot / Yocto / OpenWrt 编出镜像,用virt等机器冒烟
RTOS / Zephyr CI官方 board 列表里带 QEMU 的目标,PR 上就能跑 sample
调试启动早期配 GDB stub,看内核解压、挂根文件系统卡在哪
用户态翻译qemu-aarch64 ./my_app,快速试跑交叉编出来的程序
教学与分享读者不必买板,也能复现「启动成功」的截图

五、谁适合用、谁不适合

多半会喜欢的:

  • 板子紧缺、样品轮转慢,却要持续合代码
  • 想把「能否启动 / 基础网络 / 基础存储」放进 CI
  • 做内核、驱动框架、根文件系统,而不是只调射频
  • 教学、写公众号、做分享——降低读者复现门槛

建议别神话的:

  • 必须验证 Wi‑Fi 吞吐量、天线、产测校准
  • 强依赖厂商闭源加速器,模拟器里根本没有对应模型
  • 把「QEMU 上跑通」当成「量产可发货」——中间还差真机长跑与兼容性

六、怎么动手

  1. 先装好 QEMU
    Linux 发行版一般有包装:qemu-system-arm、qemu-system-aarch64、qemu-system-riscv64等。版本以发行版为准;追新可看官网源码包。

  2. 选一条「官方已经打通」的路径

    • 想碰 Linux:Buildroot / Yocto 文档里的 QEMU 目标
    • 想碰 RTOS:Zephyr 的qemu_*board
    • 想碰最小:官方或社区的virt机器 + 现成内核/rootfs 示例
  3. 先保证串口有打印
    第一里程碑不是跑满业务,而是:QEMU启动 → 串口打印 → 能进 shell 或看到 RTOS banner。

  4. 再挂调试器(可选)
    QEMU 提供 GDB 接口后,用gdb-multiarch连上去,和真机远程调试体感接近。

  5. 最后才谈加速与外设细节
    先跑通,再纠结网络后端、virtio、共享目录——否则参数海洋会把人淹死。

七、和同类工具怎么并列理解

方案一句话
QEMU通用模拟 / 虚拟化,跨架构最常见
厂商模拟器 / ISS往往更贴某颗芯片,但不通用、不一定开源
Renode偏物联网多节点、外设建模叙事强
真机 + CI 农场最终权威,但贵、难维护

QEMU 的胜负手是:普及度、文档与周边生态、和开源构建系统的对接。它不是每颗芯片的完美替身,却是多数开源嵌入式项目默认会提到的那一个名字。

八、优缺点

优点

  • 开源、跨平台、架构覆盖面大
  • 能把「启动与基础功能」从真机依赖里部分解放出来
  • 和 GDB、CI、Buildroot/Yocto/Zephyr 故事成熟
  • 同一套工具,桌面虚拟化与嵌入式仿真都能碰到

缺点

  • 跨架构纯模拟有时很慢
  • 外设保真度参差不齐,射频与专有 IP 基本指望不上
  • 参数多、机器多,新手容易卡在「镜像和-M不匹配」
  • 跑通 ≠ 量产验证结束

九、写在最后

下次再因为「板子还在路上」而停下手头验证时,不妨多问一句:这一步是必须用真实PCB板,还是只要需要QEMU模拟就行?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询