一、QEMU简介

kokomi
2025-02-19 / 0 评论 / 2 阅读 / 正在检测是否收录...

简介

QEMU是一个著名的虚拟化仿真开源项目,Android Studio中的仿真器就是基于QEMU

  • QEMU有两个作用:仿真(Emulation),虚拟化(Virtualization);对于嵌入式领域来说,更重要的是他的仿真功能
  • QEMU是一个能在任何平台上运行的汇编指令级别的仿真软件,目前能支持x86ARMMIPSRISC-V等多种架构的CPU及单板的仿真
  • QEMU不能提供精准的硬件仿真时序仿真,却能提供快速的汇编指令的仿真。这句话可能比较抽象,换个说法可能比较好理解一点:如果你是程序员,QEMU能提供一个你的软件可运行的单板,软件会以为自己运行在一块真实的单板上;如果你是芯片工程师,QEMU可能就不够用了,因为QEMU不能仿真各种PIN引脚的脉冲波形
  • 借助QEMU,软件开发人员可以快速得到一个虚拟的单板,完成gdbDT(Developer Test)等开发活动。最最重要的是:QEMU上运行的OSAPP均与单板二进制完全一致,无需为QEMU单独构建镜像

QEMU能做什么?

  • QEMU能让你的程序认为,它运行在一块真实的单板上,因为QEMU仿真的是单板;
  • 真实单板难以获取,QEMU就是为了解决这件事而生的;
  • QEMU能让你在一台x86的电脑上,运行ARMRISC-V架构的程序,因为QEMU仿真了ARMRISC-V单板;
  • QEMU能做单板上所有数字器件的仿真,但是对模拟器件的仿真无能为力。

如何仿真单板?

我们的嵌入式程序想在单板上运行,需要有两个前提条件:

1、单板上的 CPU 认识这个程序的汇编指令
2、程序中所访问的设备,比如:串口,在这个单板上必须真实地存在,且和程序所期待的串口完全相符

那么,QEMU 就只需要做两件事,程序就以为自己运行在真实的单板上了:

1、仿真目标程序的汇编指令集(ISA:Instructio Set Architecture)
2、仿真这个串口,以及目标程序用到的设备

仿真的运行速度会不会比真实单板慢?

会的,首先先明晰两个概念:

host:宿主机,指你的 QEMU 所运行的环境
guest:客户机,要在你的 QEMU 里运行的系统

1、如果 hostguest 不是同构处理器(比如: hostx86guestARM),QEMU 被迫翻译每一条汇编指令,这种翻译方法被称为 TCGTCG 让代码的执行效率只有 host 的30%左右(注意不是单板的30%)
但是,在大部分时候,嵌入式的处理器本身就比 x86 弱,因此,在绝大多数场景下,TCG 带来的执行效率降低远比不上“可以随时得到的单板”这个收益

2、如果 hostguest 是同构处理器(比如:hostx86guest 也是 x86),我们可以开启 KVM 加速,这时你会发现,guest 上运行的程序的速度,几乎和你真实单板一模一样,甚至有机会更快

0

评论 (0)

取消