在Windows11上通过QEMU构建ARM64开发测试环境

张开发
2026/4/10 23:38:45 15 分钟阅读

分享文章

在Windows11上通过QEMU构建ARM64开发测试环境
1. 为什么要在Windows11上搭建ARM64环境最近几年ARM架构处理器越来越火从手机芯片到苹果M系列处理器再到各种物联网设备ARM64已经成了不可忽视的技术生态。作为开发者我们经常需要在本地测试ARM平台的软件兼容性或者为嵌入式设备交叉编译程序。但现实是大多数人的主力开发机还是x86架构的Windows电脑。我之前在给树莓派开发程序时就遇到这个问题——本地编译好的x86程序放到ARM设备上完全跑不起来。后来发现用QEMU模拟ARM环境是个不错的解决方案特别是配合Windows11的WSL2使用效果出奇地好。这个方案最大的优势是不需要额外购买ARM开发板用现有的Windows电脑就能搭建完整的ARM64开发测试环境。2. 环境准备与工具安装2.1 获取必要软件包首先需要下载几个关键组件。QEMU的Windows版本可以从官网获取我推荐使用weilnetz.de提供的预编译版本这个版本对Windows支持最好https://qemu.weilnetz.de/w64/UEFI固件文件是ARM虚拟机启动的关键建议使用Linaro维护的版本https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd至于操作系统镜像我实测下来openEuler对ARM虚拟机的兼容性最好下载地址https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-20.03-LTS-SP3/ISO/aarch64/openEuler-20.03-LTS-SP3-aarch64-dvd.iso2.2 安装配置QEMU下载完QEMU安装包后直接运行安装程序建议使用默认路径。安装完成后需要将QEMU的安装目录比如C:\Program Files\qemu添加到系统PATH环境变量中。这样后续就可以在任何目录下直接调用qemu命令。验证安装是否成功qemu-system-aarch64 --version如果看到版本号输出说明安装正确。我建议同时安装tap-windows虚拟网卡驱动后面配置网络时会用到https://build.openvpn.net/downloads/releases/tap-windows-9.24.7-I601-Win10.exe3. 创建和配置ARM虚拟机3.1 初始化虚拟磁盘在PowerShell中执行以下命令创建20GB的虚拟磁盘qemu-img create -f qcow2 openEuler-arm64.img 20G这里使用qcow2格式而不是raw格式主要是因为支持动态扩容实际占用空间随使用量增长支持快照功能磁盘压缩效率更高3.2 网络配置技巧为了让虚拟机能够上网需要配置网卡共享安装完tap-windows后在网络连接中会看到新增的网卡重命名这个网卡为QEMU-TAP方便识别右键点击主机的物理网卡 → 属性 → 共享勾选允许其他网络用户通过此计算机的Internet连接来连接在下拉菜单中选择刚才创建的QEMU-TAP网卡这个配置我调试了很久才成功关键点是主机防火墙要放行相关网络连接。4. 安装和运行ARM系统4.1 启动安装命令完整的安装命令如下注意替换路径为你自己的实际路径qemu-system-aarch64 -m 4G -cpu cortex-a72 -smp 4 -M virt -bios QEMU_EFI.fd \ -net nic -net tap,ifnameQEMU-TAP \ -device nec-usb-xhci -device usb-kbd -device usb-mouse \ -device VGA \ -drive ifnone,fileopenEuler-20.03-LTS-SP3-aarch64-dvd.iso,idcdrom,mediacdrom \ -device virtio-scsi-device -device scsi-cd,drivecdrom \ -drive ifnone,fileopenEuler-arm64.img,idhd0 \ -device virtio-blk-device,drivehd0几个关键参数说明-m 4G分配4GB内存建议不低于2GB-cpu cortex-a72模拟ARM Cortex-A72处理器-smp 4使用4个CPU核心-net tap,ifnameQEMU-TAP使用之前配置的虚拟网卡4.2 安装过程注意事项安装界面启动后按照常规Linux安装流程操作即可。有几点需要特别注意分区时选择自动分区最省事创建用户时建议勾选将此用户设为管理员软件包选择建议包含开发工具集安装过程确实比较慢在我的i7笔记本上花了约40分钟5. 日常使用与优化技巧5.1 启动已安装的系统安装完成后去掉ISO相关的参数即可正常启动qemu-system-aarch64 -m 4G -cpu cortex-a72 -smp 4 -M virt -bios QEMU_EFI.fd \ -net nic -net tap,ifnameQEMU-TAP \ -device nec-usb-xhci -device usb-kbd -device usb-mouse \ -device VGA \ -drive ifnone,fileopenEuler-arm64.img,idhd0 \ -device virtio-blk-device,drivehd05.2 启用SSH远程连接在虚拟机内编辑网络配置vi /etc/sysconfig/network-scripts/ifcfg-eth0将ONBOOT改为yes保存后重启网络服务systemctl restart network然后就可以用Xshell等工具通过IP连接了。如果遇到网络问题检查主机的网卡共享设置是否正确。5.3 性能优化建议经过多次测试我发现这些优化措施效果明显使用KVM加速需Windows11开启Hyper-V为虚拟机分配更多CPU核心使用virtio磁盘和网络设备调整QEMU的线程调度策略具体优化命令示例qemu-system-aarch64 -accel whpx -cpu cortex-a72 -smp 8 ...6. 常见问题排查6.1 启动卡在UEFI界面如果启动时一直停留在UEFI shell界面通常是-bios参数指定的路径不对或者UEFI固件文件损坏。建议重新下载QEMU_EFI.fd文件。6.2 网络连接失败网络问题最常见的原因是主机网卡共享未正确配置防火墙阻挡了连接虚拟机内未启用网卡可以依次检查主机网络连接中的共享状态虚拟机内的IP地址是否获取成功尝试ping主机和外部网络6.3 图形界面卡顿ARM模拟的图形性能确实有限建议降低显示分辨率使用SSH连接代替图形界面增加虚拟机内存分配尝试不同的显示设备参数7. 进阶开发配置7.1 交叉编译环境搭建在x86主机上为ARM交叉编译程序需要安装交叉编译工具链sudo yum install gcc-aarch64-linux-gnu编译时指定目标平台aarch64-linux-gnu-gcc -o hello hello.c7.2 容器开发支持openEuler内置了docker支持可以方便地构建ARM容器镜像docker run --rm -it arm64v8/ubuntu bash这对于测试多架构容器非常有用。7.3 内核开发调试QEMU支持内核调试启动时添加-s -S参数qemu-system-aarch64 -s -S ...然后使用gdb-multiarch连接调试gdb-multiarch vmlinux target remote localhost:1234这套环境我用了大半年从最初的简单测试到现在已经作为日常ARM开发的标配。虽然初期配置有些复杂但一旦跑通就非常稳定。特别是对于需要同时开发x86和ARM程序的场景省去了频繁切换设备的麻烦。

更多文章