作者:?、アイドル宣言
前言
本文章是为了让各位更好的学习 QEMU 命令。
这里只学习 qemu-system,没有 qemu-user 的内容。
QEMU 是什么
QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器软件,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KVM,QEMU能虚拟化至真实电脑的速度。
QEMU 有什么用?
简单来说就是能跨平台高速模拟各种系统。不恰当的比喻:就是能在手机上运行 Windows 系统,而且速度很快。
开始学习
安装 QEMU
编译安装
安装依赖
QEMU 可以通过编译的方式安装。
需要先根据你系统的情况,安装 QEMU 必需的依赖(一般是这些):
1 | sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev libsdl1.2-dev libsnappy-dev liblzo2-dev zlib1g-dbg automake gcc python wget && apt-get install build-essential |
Git Glib fdt pixman zlib libsdl snappy lzo2 automake gcc python
安装完成后,需要下载 QEMU 的源码包或者是克隆。
克隆 QEMU
请输入以下命令(北京外国语大学开源软件镜像站):
1 | git clone https://mirrors.bfsu.edu.cn/git/qemu.git |
然后你应该会在主目录看到一个叫“qemu”的文件夹,这就是最新的源码包。
下载 QEMU 源码(tar.xz):
在此网站下载源码包:
https://download.qemu.org
然后通过 tar 命令解压:
1 | tar -xvf ./qemu-7.1.0-rc3.tar.xz |
开始编译
如果你前面的操作完成了的话,就可以开始编译了。
首先我们要 cd 到目录
1 | cd ~/qemu-7.1.0-rc3 |
然后开始配置编译内容,输入 ./configure 即可。但是这样的话没用的东西会很多,所以我们在 configure 里面加参数。参数可以查阅 ./configure –help。比如我们只需要编译一个架构而不是全局编译,那么我们输入:
1 | ./configure --target-list=x86_64-softmmu |
其中,x86_64-softmmu 是你要编译的架构。
那我们想编译多个架构怎么办呢?
只需要在架构后加上其他架构即可,用小写的逗号分隔。
1 | ./configure --target-list=x86_64-softmmu,aarch64-softmmu,ppc-softmmu |
还有其他的编译选项。这里就不说了。
等待配置完成后,就可以开始编译 qemu 了。
输入 make 可以开始,也可以加参数。比如我要是想开 8 核编译那么输入:
1 | make -j8 |
具体几核看你设备的 CPU 核心数。不加参数只会开一核编译,速度很慢。
编译后安装
编译完成后,你直接运行 qemu 是没有反应的,提示命令不存在。我们需要再安装一下 qemu 才能使用。
输入:
1 | make install |
就安装完成了。
brew 安装 QEMU
Mac 电脑不需要必须通过编译安装,也可以通过软件包管理器安装 QEMU。
首先给你的 Mac 电脑安装 HomeBrew。这里推荐使用国内安装脚本:
1 | /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" |
跟着安装脚本走。安装完成 Homebrew 之后,输入以下命令安装 QEMU:
1 | brew install qemu |
等待安装完成即可享用 QEMU。
APT 安装 QEMU
apt 是 Debian GNU/Linux 以及基于 Debian 的其他发行版中默认的软件包管理器。我们使用它安装 QEMU。同样也不用必须编译安装。
输入以下命令,安装 qemu 的命令行。以 x86_64/i386 架构为例,输入:
1 | sudo apt install qemu-system-x86 |
等待安装完成即可。
如果你的 Linux 系统有图形界面,那么可以直接安装 qemu 的图形前端。输入:
1 | sudo apt install aqemu |
安装完成后,可以在程序菜单里看到 aqemu,直接运行即可。
QEMU 的使用
运行 QEMU
我们按照上面的步骤安装完成 QEMU 之后,可以查看一下安装完 QEMU 的版本,输入:
1 | qemu-system-<架构> --version |

可以看到 QEMU 已经正确安装,我们现在就可以试试水,看看如何启动。
熟悉命令
QEMU 基本命令如下(x86_64):
-accel 加速类型,一般为(kvm,hax,hvf,tcg)
-machine 机器类型,一般为pc和q35。具体可查看help
-net nic,model=<网卡名称> 设置虚拟机网卡。
-net user 设置虚拟机网络模式,有user和tap可选。
-hda,-hdb,-hdc,-hdd 磁盘位,放入磁盘镜像。
-m 256 设置的内存(RAM),单位是MB。1GB=1024MB
-vga vmware 设置的显示卡
-device 添加各种硬件设备。
-soundhw sb16 启用声音支持。
-cdrom 光盘位,放入 ISO 镜像。
-fda,-fdb 软盘位,放入磁盘镜像。
-cpu 设置虚拟的 CPU
-smp <核心数> 设置虚拟cpu核心数。默认单核
-vnc :<端口号> 开启后使用 VNC Viewer 连接。
-pflash <固件> 并行闪存镜像,一般用于 EFI 启动。
-nographic 无图形启动,一般用于 Linux。
-win2k-hack (i386)在安装 Windows 2000 时使用它以避免磁盘已满错误,但会降低磁盘性能,安装完成后可以删掉该命令。
-usb 启用 USB 控制器,其他 USB 设置需要使用 -device 命令。
-sdl 开启后使用 XSDL Server 连接。
-k <language> 键盘的语言,一般是为了适配不同语种的键盘。一般不用填。
-boot c 引导顺序,c是硬盘、n是网络、d是光盘、s是软盘。
-name 虚拟机名称,如果你是 VNC 连接,该名称将显示到你 VNC 远程桌面信息。
这些命令组合起来可以运行虚拟机。
一个实例
下面是包含了上面的部分命令的一个实例,不知道你能不能看懂。
qemu-system-x86_64 -hda /home/steve372/win10.qcow2 -cdrom /home/steve372/win10.iso -m 768 -machine q35 -accel kvm -smp 2 -vga std -soundhw ac97 -usb -device usb-tablet -boot d -pflash /home/steve372/QEMU_EFI.fd -net nic,model=rtl8139 -net user -vnc :0 -name "Windows 10"如果不能看懂,可以看下面的“命令详解“。来更加了解这些命令。
命令详解
-accel 命令
-accel 命令可以为虚拟机提供加速,有以下加速类型:kvm,hax,hvf,tcg。当然,这些命令要运行起来都有一定的要求,如下:
kvm 只能在 Linux 环境运行,并且需要内核支持(手机可以洗洗睡了)
hvf 只能在 macOS 环境运行。
hax 只能在 Windows 或 macOS 环境运行,似乎不太稳定。
tcg 通用。手机只能用 tcg 了
请根据你自己的系统进行搭配。
这些加速类型之中,kvm是最快的,hvf和hax差不多,最后是tcg。
稳定性中,kvm、hvf、tcg都挺稳定的,hax一般。
-machine 命令
-machine 命令可以设置机器类型。有以下机器类型:
1 | microvm microvm (i386) |
一般来说,我们最常用的就是 pc 和 q35。如果你使用的是别人的镜像,那么务必跟随镜像主的安排。
-net 命令
QEMU 的 -net 命令是提供跟网络相关的功能,这里只介绍最基本的两种方式。
-net 的用法是:
1 | -net user -net nic,model=<网卡名称> |
首先,前面的 -net 有五种选择:user, tap, bridge, vde, socket
如果你没有特殊需求,直接使用 User 网络即可。
然后,后面的 -net 是选择虚拟的网卡。QEMU 这里有以下网卡可选:
1 | e1000 |
我们常用的是 e1000,ne2k_pci,rtl8139,virtio 网卡。
还是要看镜像主的安排。比如你的镜像支持 rtl8139 网卡,那么输入:
1 | -net user -net nic,model=rtl8139 |
就可以了。
-hda 命令
-hda,-hdb,-hdc,-hdd 是磁盘镜像位,需将下载到的镜像放到这里。用法:
1 | -hda <文件路径> |
其中,文件支持所有可用的镜像文件。
不推荐使用 -hdc 参数,可能会出问题。
如果需要使用 virtio 磁盘,那么需要使用 -drive 命令。
-m 命令
-m 命令是设置你虚拟机的内存用的。M 是 Memory(内存) 的首字母。用法:
1 | -m <数字> |
数字单位是 MB。1 GB=1024 MB、3 GB=3072 MB
-vga 命令
-vga 命令可以模拟虚拟机的显卡,用法:
1 | -vga <显卡名称> |
目前支持的显卡有:
1 | std standard VGA (default) |
如果你模拟的是 Windows 的话,那么可能需要根据你的 Windows 系统选择显卡。如下:
Windows 3.1 需要手动安装 cirrus 驱动。
Windows 95 cirrus
Windows 98 cirrus
Windows 2000 cirrus
Windows XP std / VMware
Windows Vista std / VMware
Windows 7 std / VMware
Windows 8 std / VMware
Windows 8.1 std / VMware
Windows 10 std / VMware
Windows 11 std / VMware
Linux 应该可以选择 virtio 显卡。
-device 命令
-device 命令是 QEMU 处理硬件的一个媒介,他也可以取代部分命令。比如 -soundhw 和 -usbdevice。如果需要将 VNC 和鼠标对齐的话,输入:
1 | -usb // 启用 USB 控制器 |
就可以了。更深层次的 USB 命令到后面会讲。
-soundhw 命令
-soundhw 命令是启用声音支持,直白了说就是能让虚拟机出声音。用法:
1 | -soundhw <声卡名称> |
我们只需要填入声卡名称就可以了,声卡名如下:
1 | ac97 Intel 82801AA AC97 Audio |
我们常用的是 sb16 和 ac97 还有 hda。
-cdrom 命令
该命令是光驱位,放入光盘镜像(*.ISO)用法:
1 | -cdrom <文件路径> |
直接将光盘文件路径写下即可。
光盘是有code显示的,可以通过这个代码定位问题。

-cpu 命令
模拟你要模拟的 CPU,可选 CPU 有:
1 | x86 486 (alias configured by machine type) |
具体根据自己需求选择。
-smp 命令
该命令可以指定虚拟 CPU 的数量,核心数,线程数等。用法:
只指定 CPU 数量:
1 | -smp 2 |
即代表 QEMU 会模拟两个 CPU 出来(不是核心)。
当然,你也可以加参数,命令如下:
1 | -smp cores=2,threads=4,sockets=1 |
这条命令的意思是:一个 CPU 插槽,双核四线程。
-vnc 命令
这条命令可以让你的虚拟机通过 VNC Viewer 连接。用法:
1 | -vnc :<端口号> |
输入后直接使用 VNC Viewer 连接。如果 -vnc :0 那么在 VNC Viewer 的连接中就设置为 <ip地址>:0。如果你是手机开的模拟器,输入 127.0.0.1:0
-pflash 命令
一般用于 EFI 引导启动,用法:
1 | -pflash <EFI 固件> |
需要你有 EFI 固件,一般是 fd 格式。
其他 QEMU 模拟器的操作
连接 USB 设备
可以通过 -device 命令将 U 盘连接到模拟器。
如果要连接 USB 设备到 QEMU,那么需要先查询 USB 设备的位置。我们输入:
1 | lsusb -t |
来查询 USB 设备的位置。看他的输出:
找到你要连接的 USB 的位置。我这里以 我的 U 盘(Disk 2.0) 为例子。
输入:
1 | -device usb-ehci,id=ehci |
其中,第一行的命令是指定虚拟的 USB 版本,我这里是 2.0。如果要虚拟 USB 3.0,请输入 xhci。
第二行的命令是定位 USB 设备的位置,我的设备在 Bus 020,Port 1 的位置上,所以输入的bus=20 port=1。而 port 的位置就是指树根下的位置。我是树根下的第 1 个位置,所以填 1。一定要根据自己实际情况填写。
EFI 固件的使用
QEMU 是可以使用 UEFI 启动的,需要 EFI 固件。
启动命令请查看 -pflash 命令。
这里提供下载:
下载 QEMU_EFI.fd
无界面引导
有时候我们在模拟虚拟系统的时候需要直接将终端变成 QEMU 的控制台,那么我们加上 -nographic 命令即可。