在Windows上构建飞腾ARM开发环境:QEMU虚拟化实战全解析
最近身边不少做信创开发的朋友都在抱怨,说手头没有飞腾的硬件设备,想测试个软件包都得四处借机器。其实这个问题我去年就遇到了,当时有个项目需要适配飞腾架构的麒麟系统,但公司预算有限,不可能为了测试就采购一台新设备。经过一番折腾,我发现用QEMU在Windows上虚拟出完整的ARM环境,完全能满足日常开发和测试需求。
今天我就把自己踩过的坑、总结的经验完整分享出来,从环境准备到性能优化,每个步骤都有详细说明。这套方案特别适合那些想体验国产操作系统但缺乏ARM硬件的开发者,无论是做软件适配、系统测试,还是单纯想学习ARM架构,都能从中受益。
1. 环境准备与工具选择
在开始之前,我们需要明确几个关键点。QEMU是一个开源的机器模拟器和虚拟器,它最大的优势是能够跨架构模拟——也就是说,在x86的Windows电脑上,它能模拟出ARM处理器的运行环境。这听起来有点绕,但理解这一点很重要:QEMU不是传统意义上的虚拟机软件,它实际上是在软件层面“翻译”指令集。
传统虚拟机如VMware、VirtualBox,它们要求宿主机和客户机使用相同的CPU架构(比如都是x86),通过硬件辅助虚拟化技术来提升性能。而QEMU则不同,当你在x86上运行ARM系统时,它需要把ARM指令实时翻译成x86指令,这个翻译过程自然会带来性能损耗。不过对于开发和测试场景来说,这个性能是完全够用的。
1.1 工具清单与版本选择
先来看看我们需要准备哪些东西。下面这个表格是我推荐的工具版本组合,经过多次测试验证,兼容性最好:
| 工具/组件 | 推荐版本 | 获取方式 | 备注 |
|---|---|---|---|
| QEMU for Windows | 2021年5月版本 (qemu-w64-setup-20210505.exe) | QEMU官网Windows构建页面 | 这个版本稳定性最好,后续版本有时会有兼容性问题 |
| 麒麟操作系统镜像 | V10 SP1 ARM64桌面版 | 官方渠道或授权合作伙伴 | 确保是ARM64架构,x86版本无法在QEMU ARM模拟中运行 |
| UEFI固件文件 | QEMU_EFI.fd | 随QEMU安装包提供或单独下载 | ARM架构的UEFI启动文件,相当于传统PC的BIOS |
| TAP-Windows驱动 | tap-windows-9.9.2_3.exe | OpenVPN项目提供 | 用于创建虚拟网卡,实现虚拟机网络连接 |
注意:麒麟操作系统的镜像获取需要特别注意版权和授权问题。如果你是开发者,可以通过官方开发者计划申请;如果是企业用户,需要购买相应的授权。切勿使用来路不明的镜像文件。
关于QEMU版本的选择,我特别推荐2021年5月的这个版本。我试过更新的版本,比如2021年12月的,在某些Windows 10系统上会出现奇怪的图形显示问题。而更老的版本又缺少一些ARM虚拟化的优化特性。这个版本算是平衡点,既稳定又功能完整。
1.2 目录结构规划
在开始安装之前,我建议先规划好目录结构。混乱的文件存放位置是很多新手容易踩的坑,等需要修改配置时,找文件都要找半天。我的习惯是这样的:
G:\arm_development\
├── qemu\ # QEMU安装目录
├── images\ # 虚拟磁盘文件存放处
│ └── kylin_disk.qcow2 # 麒麟系统的虚拟硬盘
├── firmware\ # 固件文件
│ └── QEMU_EFI.fd # UEFI启动文件
├── isos\ # 系统镜像
│ └── Kylin-Desktop-V10-SP1-ARM64.iso
├── scripts\ # 脚本文件
│ ├── install.bat # 安装脚本
│ └── start.bat # 启动脚本
└── docs\ # 相关文档
这样的结构清晰明了,后续维护起来也方便。特别是当你可能需要同时管理多个不同的ARM系统时(比如除了麒麟,还想试试UOS),这种模块化的结构优势就体现出来了。
2. QEMU安装与基础配置
QEMU的安装过程本身很简单,但有几个细节需要注意。双击安装包后,它会提示你选择安装路径。这里我建议不要使用默认的Program Files目录,而是选择一个没有空格、路径较短的目录,比如D:\qemu或G:\arm_development\qemu。
为什么这么建议?因为后续我们需要在命令行中频繁引用QEMU的可执行文件,如果路径中有空格,每次都要用引号包裹,非常麻烦。而且有些脚本对带空格的路径处理不太友好,容易出错。
安装完成后,我们需要验证一下安装是否成功。打开命令提示符(CMD),切换到QEMU的安装目录,执行:
qemu-system-aarch64.exe --version
如果看到类似下面的输出,说明安装成功:
QEMU emulator version 5.2.0 (v5.2.0-11802-g5b1b0c2af6-dirty)
Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers
2.1 创建虚拟磁盘
虚拟磁盘相当于虚拟机的硬盘,麒麟系统就安装在这个文件里。QEMU支持多种磁盘格式,我推荐使用qcow2格式,它有以下几个优势:
- 稀疏文件:创建时指定50G,实际文件大小可能只有几百KB,随着使用才逐渐增大
- 快照功能:可以随时创建系统快照,测试失败了一键回滚
- 动态分配:更高效地利用物理磁盘空间
创建虚拟磁盘的命令如下:
qemu-img create -f qcow2 G:\arm_development\images\kylin_disk.qcow2 50G
这里的参数解释一下:
-f qcow2:指定磁盘格式为qcow2- 最后一个参数
50G:指定磁盘容量为50GB
执行成功后,你会看到类似这样的输出:
Formatting 'G:\arm_development\images\kylin_disk.qcow2', fmt=qcow2 size=53687091200 cluster_size=65536 lazy_refcounts=off refcount_bits=16
现在用文件管理器查看这个文件,你会发现它实际大小只有几百KB,这就是稀疏文件的特性。
2.2 网络配置:TAP驱动安装
网络配置是QEMU使用中最容易出问题的环节。为了让虚拟机能够访问外部网络,我们需要安装TAP-Windows驱动。这个驱动会创建一个虚拟网卡,让QEMU虚拟机通过这个网卡与宿主机通信。
安装过程很简单,双击tap-windows-9.9.2_3.exe,一路Next即可。安装完成后,打开“网络连接”窗口(可以在控制面板找到,或者右键点击任务栏网络图标选择“打开网络和Internet设置”),你会看到多了一个名为“TAP-Windows Adapter V9”的网络连接。
接下来需要做两件事:
-
重命名虚拟网卡:右键点击这个新网卡,选择“重命名”,把它改为
tap0。这样我们在后续的脚本中引用时就清晰多了。 -
创建网络桥接(可选但推荐):
- 按住Ctrl键,同时选中
tap0和你的物理网卡(比如“以太网”或“WLAN”) - 右键点击,选择“桥接”
- 系统会创建一个“网络桥接”连接
- 按住Ctrl键,同时选中
桥接模式的好处是,虚拟机会获得与宿主机同一网段的IP地址,就像局域网里的一台真实机器一样。如果不使用桥接,QEMU也支持NAT模式,但配置起来稍微复杂一些。
重要提示:在创建桥接之前,最好先用
ipconfig /all命令记录下你当前的网络配置(IP地址、子网掩码、网关、DNS)。因为创建桥接后,原来的网络连接会消失,所有配置都会转移到桥接连接上。如果后续需要手动配置,这些信息就派上用场了。
3. 麒麟系统安装实战
准备工作都做好了,现在可以开始安装麒麟系统了。这是整个过程中最需要耐心的一步,因为ARM指令翻译的效率问题,安装过程会比在真实硬件上慢不少。
3.1 启动安装命令解析
我们先来看完整的安装命令,然后逐部分解释:
qemu-system-aarch64.exe ^
-m 8192 ^
-cpu cortex-a72 ^
-smp 8,sockets=4,cores=2 ^
-M virt ^
-bios G:\arm_development\firmware\QEMU_EFI.fd ^
-device VGA ^
-device nec-usb-xhci ^
-device usb-mouse ^
-device usb-kboard ^
-drive if=none,file=G:\arm_development\images\kylin_disk.qcow2,id=hd0 ^
-device virtio-blk-device,drive=hd0 ^
-drive if=none,file=G:\arm_development\isos\Kylin-Desktop-V10-SP1-ARM64.iso,id=cdrom,media=cdrom ^
-device virtio-scsi-device ^
-device scsi-cd,drive=cdrom ^
-net nic ^
-net tap,ifname=tap0
这个命令看起来很长,其实结构很清晰。在Windows的CMD中,^是续行符,让命令可以分成多行书写,提高可读性。如果是在PowerShell中,续行符是反引号`。
关键参数详解:
-
-m 8192:为虚拟机分配8GB内存。这个值可以根据你的物理内存调整,建议至少4GB,8GB比较流畅。 -
-cpu cortex-a72:模拟的CPU类型。cortex-a72是ARMv8-A架构的处理器,性能不错,兼容性也好。你也可以尝试其他型号,如cortex-a57或cortex-a53。 -
-smp 8,sockets=4,cores=2:CPU拓扑结构。这里配置了8个虚拟CPU核心,分布在4个插槽上,每个插槽2个核心。这种配置模拟了多路服务器的架构。 -
-M virt:机器类型。virt是QEMU提供的一个通用虚拟平台,它不模拟特定的硬件设备,而是提供一组标准化的虚拟设备,兼容性最好。 -
-bios ...



被折叠的 条评论
为什么被折叠?



