QEMU
1. QEMU 是什么
Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。
所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成虚拟化工作,因为 KVM 是硬件辅助的虚拟化技术,主要负责比较繁琐的 CPU 和内存虚拟化,而 Qemu 则负责 I/O 虚拟化,两者合作各自发挥自身的优势,相得益彰。
QEMU 官网
https://www.qemu.org/
2. Qemu的两种模式
用户模式(User mode):利用动态代码翻译机制来执行不同主机架构的代码,例如:在x86平台上模拟执行ARM代码,也就是说:我们写一条ARM指令,传入整个模拟器中,模拟器会把整个指令翻译成x86平台的指令,然后在x86的CPU中执行。
系统模式(System mode):模拟整个电脑系统,利用其它VMM(Xen, KVM)来使用硬件提供的虚拟化支持,创建接近于主机性能的全功能虚拟机
3. Qemu 能做什么?或者说适合做什么?
因为Qemu是使用纯软件模拟的,它的强项是模拟那些不涉及到外部的具体硬件设备的场景,比如: 想学习如何定制bootloader; 想在Arm系统中进行文件系统的裁剪,学习文件系统的挂载过程; 想体验一下如何配置、裁剪linux kernel; 想学习Linux系统中的设备树;
4. 安装使用
1、在 Linux ( Ubuntu ) 上安装 QEMU
# qemu-system-aarch64:armv8 QEMU模拟工具
# -machine virt,secure=on: 设备类型为虚拟,目前不知道为什么“secure=on”必须设置,否则我的测试平台测试中一直没有输出
# -cpu cortex-a57: 模拟a57
# -nographic: 不支持graphic
# -m 1057:内存大小
# -smp 2: CPU 个数
# -bios filename: 自己需要测试的bios bin file
qemu-system-aarch64 -machine virt,secure=on -cpu cortex-a57 -nographic -m 1057 -smp 2 -bios filename
2、在 Windows 上安装 QEMU
...
Qemu有两种执行模式:
一、用户模式(User mode):利用动态代码翻译机制来执行不同主机架构的代码,例如:在x86平台上模拟执行ARM代码,也就是说:我们写一条ARM指令,传入整个模拟器中,模拟器会把整个指令翻译成x86平台的指令,然后在x86的CPU中执行。
二、系统模式(System mode):模拟整个电脑系统,利用其它VMM(Xen, KVM)来使用硬件提供的虚拟化支持,创建接近于主机性能的全功能虚拟机。
当前台架中使用的 QNX 版本
QNX localhost 7.0.4S 2019/12/05-12:56:01EST ARMv8_nVidia-Xavier aarch64le
5. 难点
本地难以模拟 GPU 等其他外设
6. 外部参考
https://segmentfault.com/a/1190000040729894
https://www.zhihu.com/question/488731997
https://zhuanlan.zhihu.com/p/340362172
https://www.zhihu.com/market/pub/119583429/manuscript/1057342096855433216