QEMU 在 Windows 和 CentOS 7 下安装及运行 ARM 操作系统指南
本文总结如何在 Windows 和 CentOS 7 宿主机上安装 QEMU,并通过 QEMU 模拟 ARM 架构(aarch64/armv7)的操作系统。
一、通用准备工作
无论哪种宿主机,都需要以下文件:
- QEMU 程序(Windows 安装包或 CentOS 软件包)
- UEFI 固件文件 (
QEMU_EFI.fd,用于 ARM 虚拟机引导) - ARM 操作系统安装镜像(如麒麟 ARMv7、CentOS ARM64、Ubuntu ARM64 等)
架构选择 :虽然可以模拟 ARMv7(32位),但推荐使用 ARM64(aarch64) 镜像,兼容性和稳定性更好。
若使用 ARMv7 镜像,启动命令中需将 CPU 型号改为
-cpu cortex-a15等 32 位处理器。
二、Windows 下安装与运行
2.1 安装 QEMU
- 访问 QEMU for Windows 官方下载页,下载
qemu-w64-setup-<版本>.exe。 - 运行安装程序,建议安装路径为
D:\qemu(避免空格和权限问题)。 - 将
D:\qemu添加到系统 PATH 环境变量 ,以便在任意命令行使用qemu-system-aarch64等命令。
2.2 准备文件
创建一个工作目录,例如 D:\Kylin-ARM,放入以下文件:
QEMU_EFI.fd(从 Linaro 快照 下载)- ARM 系统镜像,如
Kylin_Server_V10_SP3_ARMV7.iso(或CentOS-7-aarch64.iso)
2.3 创建虚拟硬盘
打开 命令提示符(cmd),进入工作目录,执行:
cmd
cd /d D:\Kylin-ARM
qemu-img create -f qcow2 kylin-system.qcow2 50G
2.4 启动安装
执行以下命令启动安装程序(以 ARM64 为例,若为 ARMv7 请将 -cpu cortex-a72 改为 -cpu cortex-a15):
cmd
qemu-system-aarch64 ^
-m 4096 ^
-cpu cortex-a72 -smp 4 ^
-M virt ^
-bios QEMU_EFI.fd ^
-device VGA ^
-device nec-usb-xhci -device usb-kbd -device usb-mouse ^
-drive if=none,file=kylin-system.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-drive if=none,file=Kylin_Server_V10_SP3_ARMV7.iso,id=cdrom,media=cdrom ^
-device virtio-scsi-device -device scsi-cd,drive=cdrom ^
-netdev user,id=net0 -device virtio-net-pci,netdev=net0
参数说明:
-m 4096:分配 4GB 内存(可调整)-cpu cortex-a72:模拟 ARMv8 处理器-smp 4:4 个 CPU 核心-bios:指定 UEFI 固件-drive ...:挂载虚拟硬盘和 ISO 镜像-netdev user:用户模式网络(可访问外网,支持端口转发)
安装过程较慢(可能 1~2 小时),完成后系统会自动重启。
2.5 日常启动
安装完成后,移除 ISO 挂载,使用精简命令:
cmd
qemu-system-aarch64 ^
-m 4096 ^
-cpu cortex-a72 -smp 4 ^
-M virt ^
-bios QEMU_EFI.fd ^
-device VGA ^
-device nec-usb-xhci -device usb-kbd -device usb-mouse ^
-drive if=none,file=kylin-system.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-netdev user,id=net0 -device virtio-net-pci,netdev=net0
可将该命令保存为 start-kylin.bat 方便双击运行。
三、CentOS 7 下安装与运行
3.1 安装 QEMU
方案一:使用 EPEL 仓库(推荐)
bash
sudo yum install epel-release -y
sudo yum install qemu-system-aarch64 qemu-img -y
方案二:源码编译(获取最新版)
bash
# 安装编译依赖
sudo yum install gcc glib2-devel zlib-devel pixman-devel -y
# 下载源码(以 7.2.0 为例)
wget https://download.qemu.org/qemu-7.2.0.tar.xz
tar xvJf qemu-7.2.0.tar.xz
cd qemu-7.2.0
# 仅编译 aarch64 目标
./configure --target-list=aarch64-softmmu
make -j $(nproc)
sudo make install # 可执行文件在 /usr/local/bin/
3.2 准备文件
创建工作目录并下载所需文件:
bash
mkdir ~/arm-vm
cd ~/arm-vm
# 下载 UEFI 固件
wget https://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-AARCH64/RELEASE_GCC5/QEMU_EFI.fd
# 下载 ARM64 系统镜像(例如 CentOS 7 aarch64)
wget http://mirrors.huaweicloud.com/centos-altarch/7.6.1810/isos/aarch64/CentOS-7-aarch64-Everything-1810.iso
3.3 创建虚拟硬盘
bash
qemu-img create -f qcow2 centos-arm64.qcow2 20G
3.4 启动安装(无图形界面模式)
由于 CentOS 7 服务器通常没有图形环境,使用 -nographic 将控制台输出到终端:
bash
qemu-system-aarch64 \
-m 2048 \
-cpu cortex-a57 \
-smp 2 \
-M virt \
-bios QEMU_EFI.fd \
-drive if=none,file=centos-arm64.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-drive if=none,file=CentOS-7-aarch64-Everything-1810.iso,id=cdrom,media=cdrom \
-device virtio-scsi-device -device scsi-cd,drive=cdrom \
-netdev user,id=net0,hostfwd=tcp::5555-:22 \
-device virtio-net-pci,netdev=net0 \
-vga virtio \
-nographic
参数说明:
-nographic:将串口/控制台重定向到当前终端,适合无图形界面的服务器。hostfwd=tcp::5555-:22:将宿主机的 5555 端口转发到虚拟机的 22 端口(SSH),方便远程连接。-vga virtio:虚拟显卡驱动。
安装过程全终端交互,按提示完成系统安装。
3.5 日常启动(无 ISO)
bash
qemu-system-aarch64 \
-m 2048 \
-cpu cortex-a57 \
-smp 2 \
-M virt \
-bios QEMU_EFI.fd \
-drive if=none,file=centos-arm64.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0,hostfwd=tcp::5555-:22 \
-device virtio-net-pci,netdev=net0 \
-vga virtio \
-nographic
保存为 start-centos-arm.sh 并赋予执行权限:chmod +x start-centos-arm.sh。
3.6 (可选)使用 virt-manager 图形化管理
若 CentOS 7 安装了桌面环境,可安装 virt-manager:
bash
sudo yum install virt-manager libvirt -y
sudo systemctl start libvirtd
然后配置 UEFI 支持(编辑 /etc/libvirt/qemu.conf,添加 nvram 路径),重启服务后用 virt-manager 新建 ARM 虚拟机。
四、常见问题与注意事项
| 问题 | 解决方案 |
|---|---|
| 启动后黑屏 / 无法引导 | 1. 确认使用了正确的 QEMU_EFI.fd 固件。 2. 尝试将 CPU 型号改为 -cpu max。 3. 若镜像为 ARMv7,改用 -cpu cortex-a15 并添加 -machine type=virt。 |
Windows 报错 VBOX_E_PLATFORM_ARCH_NOT_SUPPORTED |
该错误是 VirtualBox 的限制,请使用 QEMU。 |
| 安装极慢 | 正常现象,QEMU 为软件模拟,性能约为物理机的 10%~30%。可适当增加 -m 内存和 -smp 核心数。 |
| 网络不通 | 检查 -netdev user 参数是否完整。如需 SSH 连接,确保添加 hostfwd。 |
| 宿主机 CPU 占用 100% | 正常,QEMU 模拟 ARM 指令会消耗大量 CPU 资源。可尝试降低 -smp 核心数。 |
五、多虚拟机同时运行
如需同时运行多个 ARM 虚拟机,可以采用以下方法:
- 多开模式 :分别创建独立的虚拟硬盘文件,使用不同的端口转发(如
hostfwd=tcp::5555-:22和::5556-:22),分别启动 QEMU 进程。 - Overlay 镜像模式 :共享一个基础镜像(
base.qcow2),为每个实例创建差异镜像:
qemu-img create -f qcow2 -b base.qcow2 -F qcow2 vm1-overlay.qcow2
可大幅节省磁盘空间。 - 网络集群:使用 TAP 网桥或 Docker 容器化 QEMU 实现多节点互联。
资源要求:同时运行 3 个 2GB 内存的 ARM 虚拟机,宿主机建议至少 16GB 内存 + 多核 CPU。
六、总结
| 宿主机 | 安装方式 | 启动命令特点 |
|---|---|---|
| Windows | 下载安装包,配置 PATH | 图形窗口显示,需添加 -device VGA 等显示设备 |
| CentOS 7 | EPEL 仓库或源码编译 | 常使用 -nographic 终端模式,可配置端口转发 |
无论哪种环境,核心步骤均为:
- 安装 QEMU
- 准备 UEFI 固件和 ARM 镜像
- 创建虚拟硬盘
- 使用
qemu-system-aarch64启动安装 - 后续启动移除 ISO 挂载
最后建议 :由于 ARMv7 兼容性不确定,若遇到启动失败,请优先下载一个标准的 ARM64(aarch64) 发行版(如 Ubuntu Server、CentOS 7 aarch64)测试 QEMU 环境是否正常,再尝试运行你的麒麟 ARMv7 镜像。
如果在操作中遇到任何具体错误,欢迎提供报错信息,以便进一步排查。