Win10下用QEMU玩转国产飞腾ARM架构:从零搭建麒麟V10桌面版全流程

在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:\qemuG:\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”的网络连接。

接下来需要做两件事:

  1. 重命名虚拟网卡:右键点击这个新网卡,选择“重命名”,把它改为tap0。这样我们在后续的脚本中引用时就清晰多了。

  2. 创建网络桥接(可选但推荐):

    • 按住Ctrl键,同时选中tap0和你的物理网卡(比如“以太网”或“WLAN”)
    • 右键点击,选择“桥接”
    • 系统会创建一个“网络桥接”连接

桥接模式的好处是,虚拟机会获得与宿主机同一网段的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 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值