1 后端/加速器
系统模拟主要用于在host设备上运行guest OS QEMU支持多种hypervisors,同时也支持JIT模拟方案(TCG)
例如从上表我们可以看出,运行在x86硬件上的Linux系统支持KVM,Xen,TCG
2 特性简介
提供了多种设备模型device model 用于模拟你想要加入到模拟及其上的各类设备
多种设备模拟方案:直接模拟(即由qemu主程序进行设备管理),独立模拟(基于VirtIO或Multi-process QEMU),设备直传(即将真实设备“穿透”到VM中,需要硬件支持 ) feature block layer :用于支持复杂存储拓扑的构建chardev :一种灵活的字符设备模拟方案,可以基于stdio、file、Sockets等实现对字符设备的模拟多种管理接口Management Interface
Human Monitor Protocal(HMP) QEME Monitor Protocal(QMP)
3 运行
Qemu提供了非常丰富且复杂的接口
部分体系结构下支持基于disk image的“一键启动”,但这种方式隐藏了很多可控的细节 除了通过命令行的方式进行虚拟机管理外,基于QMP构建的libvirt 框架现在也有非常的,可用的,更友好的虚拟机管理工具 系统模拟的command line一般形式
Qemu并没有提供一个统一的命令行工具,而是依据模拟方案以及模拟目标进行划分,例如途中的qemu-system-x86_64 表示针对x86的系统模拟(system)命令行工具
Machine选项定义了模拟及其的类型,各种不同的设备可能包含默认device
Device选项用于定义Machine选项中没有默认值的设备
Backends选项定义了模拟机器的“工作模式” 案例:
$ qemu-system-aarch64 \
-machine type = virt,virtualization= on,pflash0= rom,pflash1= efivars \
-m 4096 \
-cpu max,pauth-impdef= on \
-smp 4 \
-accel tcg \
-device virtio-net-pci,netdev= unet \
-device virtio-scsi-pci \
-device scsi-hd,drive= hd \
-netdev user,id= unet,hostfwd= tcp::2222-:22 \
-blockdev driver = raw,node-name= hd,file.driver= host_device,file.filename= /dev/lvm-disk/debian-bullseye-arm64 \
-serial mon:stdio \
-display none \
-blockdev node-name= rom,driver= file,filename= ( pwd) /pc-bios/edk2-aarch64-code.fd,read-only= true \
-blockdev node-name= efivars,driver= file,filename= $HOME /images/qemu-arm64-efivars