在Windows11上通过QEMU搭建ARM64服务器:以openEuler为例
1. 为什么要在Windows11上搭建ARM64服务器?
最近几年ARM架构的处理器越来越火,从手机芯片到苹果M系列处理器,再到各种云服务器,ARM64架构正在快速崛起。作为开发者,我们经常需要在本地搭建测试环境,但大多数人的主力机还是x86架构的Windows电脑。这时候QEMU就派上用场了——它能在x86电脑上完美模拟ARM64环境。
我在实际项目中遇到过很多需要ARM64环境的情况,比如:
- 开发跨平台应用时测试ARM64兼容性
- 学习ARM架构的汇编语言和系统编程
- 在本地搭建轻量级服务器进行开发测试
- 体验openEuler等国产操作系统
传统做法是购买ARM开发板或者租用云服务器,但前者成本高,后者延迟大。用QEMU在本地搭建环境,既省钱又方便调试。下面我就手把手教你如何在Windows11上,用QEMU搭建一个完整的ARM64服务器环境。
2. 准备工作:下载必要组件
2.1 安装QEMU模拟器
QEMU是目前最强大的开源虚拟机软件,支持跨架构模拟。Windows版本可以直接从官网下载:
https://qemu.weilnetz.de/w64/建议选择最新稳定版,我测试时用的是qemu-w64-setup-20231211.exe。安装过程很简单,一路Next就行,但记得勾选"Add QEMU to the system PATH for all users",这样后面在命令行使用会更方便。
2.2 获取UEFI固件文件
由于我们要模拟的是ARM64架构,需要专门的UEFI固件。推荐使用Linaro提供的版本:
https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd下载后建议放在一个简单的路径,比如我放在了D:\QEMU目录下。这个文件很关键,后续启动虚拟机时要用到。
2.3 下载openEuler镜像
openEuler是华为开源的Linux发行版,对ARM架构支持很好。我们到官网下载aarch64版本:
https://www.openeuler.org/zh/download/建议选择LTS长期支持版本,我使用的是openEuler-20.03-LTS-SP3。清华镜像站下载速度更快:
https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-20.03-LTS-SP3/ISO/aarch64/openEuler-20.03-LTS-SP3-aarch64-dvd.iso3. 配置虚拟网络环境
3.1 安装TAP虚拟网卡
要让虚拟机联网,需要先安装TAP虚拟网卡驱动。从OpenVPN官网下载:
https://build.openvpn.net/downloads/releases/tap-windows-9.24.7-I601-Win10.exe安装完成后,在"网络连接"里会多出一个"TAP-Windows Adapter V9"的网卡。建议重命名为简单好记的名字,比如"tap-arm",后面配置时会用到。
3.2 设置网络共享
右键点击主机的物理网卡(比如WIFI或者以太网),选择"属性"→"共享",勾选"允许其他网络用户通过此计算机的Internet连接来连接",在下拉菜单中选择刚才创建的TAP虚拟网卡。
这一步是关键,相当于把主机的网络共享给虚拟机使用。如果配置正确,虚拟机的网卡会自动获取IP地址。
4. 创建并安装虚拟机
4.1 创建虚拟磁盘
打开PowerShell,使用qemu-img命令创建虚拟磁盘:
qemu-img create -f qcow2 openEuler-arm64.img 20G这里解释下参数:
- -f qcow2:使用qcow2格式,支持动态扩容
- 20G:分配20GB空间(实际不会立即占用20G物理空间)
4.2 启动安装程序
这是最复杂的部分,需要输入一长串命令:
qemu-system-aarch64 -m 4G -cpu cortex-a72 -smp 4 -M virt -bios D:\QEMU\QEMU_EFI.fd -net nic -net tap,ifname=tap-arm -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=D:\QEMU\openEuler-20.03-LTS-SP3-aarch64-dvd.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=D:\QEMU\openEuler-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0关键参数说明:
- -m 4G:分配4GB内存
- -cpu cortex-a72:模拟ARM Cortex-A72 CPU
- -smp 4:使用4个CPU核心
- -net tap,ifname=tap-arm:使用之前创建的虚拟网卡
- -device VGA:启用图形界面(安装系统必须)
执行后会弹出QEMU窗口,开始安装openEuler。安装过程可能会比较慢,建议耐心等待。
5. 系统配置与远程连接
5.1 首次启动配置
安装完成后,用以下命令启动虚拟机(去掉ISO相关参数):
qemu-system-aarch64 -m 4G -cpu cortex-a72 -smp 4 -M virt -bios D:\QEMU\QEMU_EFI.fd -net nic -net tap,ifname=tap-arm -device nec-usb-xhci -device usb-kbd -device usb-mouse -device VGA -drive if=none,file=D:\QEMU\openEuler-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0首次启动需要完成一些初始化设置,比如创建用户、设置密码等。建议创建一个具有sudo权限的普通用户,而不是直接使用root账户。
5.2 配置SSH远程连接
默认情况下网卡可能不会自动启用,需要手动配置:
cd /etc/sysconfig/network-scripts/ vi ifcfg-eth0将ONBOOT=no改为ONBOOT=yes,保存后重启网络服务:
systemctl restart network然后用ifconfig查看IP地址,就可以用Xshell、MobaXterm等工具SSH连接了。这样操作比在QEMU窗口里方便得多。
6. 性能优化与实用技巧
6.1 启用KVM加速(可选)
如果你的Windows11支持WSL2,可以通过以下步骤启用KVM加速:
- 确保BIOS中开启了虚拟化支持
- 安装WSL2和Linux发行版
- 在Linux子系统中运行QEMU,添加-enable-kvm参数
这样性能会有显著提升,特别是对于CPU密集型任务。
6.2 共享文件夹配置
要实现宿主机和虚拟机之间的文件共享,可以这样操作:
- 在Windows上创建一个共享文件夹
- 在openEuler中安装samba客户端
- 使用mount.cifs命令挂载共享目录
具体命令示例:
sudo yum install cifs-utils sudo mkdir /mnt/share sudo mount -t cifs //192.168.1.100/share /mnt/share -o username=winuser,password=1234566.3 常见问题解决
我在实践中遇到过几个典型问题:
- 启动时卡在UEFI界面:通常是-bios参数指定的路径不对,检查UEFI文件路径
- 网络连接失败:确认TAP网卡名称是否正确,ifname参数要完全匹配
- 图形界面黑屏:确保添加了-device VGA参数
- 性能太差:尝试减少CPU核心数或内存大小,或者改用KVM加速
7. 进阶应用场景
7.1 搭建开发测试环境
配置好基础环境后,可以进一步安装开发工具链:
sudo yum install gcc make git python3这样就能在ARM64环境下编译和测试代码了。特别适合需要交叉编译的场景,比如开发IoT设备应用。
7.2 部署轻量级服务
openEuler自带了Docker支持,可以方便地部署各种服务:
sudo yum install docker sudo systemctl start docker sudo docker run -d -p 8080:80 nginx这样就在ARM64环境下运行了一个Nginx服务器,完全模拟了生产环境。
7.3 集群实验环境
通过复制多个虚拟磁盘文件,可以轻松创建多个ARM64虚拟机,搭建分布式系统的实验环境。配合虚拟网络配置,能够模拟真实的服务器集群。
我在学习Kubernetes时就用这种方法搭建了3节点的ARM64集群,完全不需要额外硬件投入。QEMU的命令行参数支持脚本化,可以编写批处理文件一键启动多个虚拟机。
