############ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
1. 为什么需要QEMU虚拟化ARM环境在软件开发或系统测试过程中我们经常需要针对不同硬件架构进行兼容性验证。以国产飞腾处理器为代表的ARM架构设备虽然越来越普及但实际开发环境中x86架构的PC仍占主流。这就产生了一个矛盾开发者需要在ARM环境下测试但手头可能没有实体设备。这时候QEMU就派上用场了。作为一款开源的机器模拟器QEMU能够完整模拟包括ARM在内的多种CPU架构。我去年在做一个跨平台项目时就曾用QEMU成功搭建了飞腾处理器的虚拟环境省去了购买实体设备的成本。相比VMware等只能模拟x86架构的虚拟化方案QEMU的跨架构模拟能力确实让人眼前一亮。2. 环境准备与工具安装2.1 必备软件清单在开始之前我们需要准备以下工具和文件QEMU本体建议从官网下载最新稳定版我测试时用的是7.2.0版本。Windows用户可以直接安装exe包Linux用户通过包管理器安装更便捷。UEFI固件这是ARM虚拟机的BIOS可以从Linaro官网获取。我推荐使用QEMU_EFI.fd这个版本兼容性最好。系统镜像需要准备ARM架构的麒麟系统ISO。官方提供试用版下载记得选择aarch64版本。虚拟磁盘使用qemu-img命令创建建议分配至少50GB空间。实际测试发现30GB的磁盘在安装完系统后很快就会捉襟见肘。2.2 创建虚拟磁盘打开终端执行以下命令创建虚拟磁盘qemu-img create -f qcow2 kylin_disk.qcow2 50G这个命令会创建一个动态分配的qcow2格式虚拟磁盘。我更喜欢qcow2而不是raw格式因为它支持快照功能而且初始占用空间小。曾经有一次我误操作删除了重要文件多亏有快照功能才避免了重装系统的麻烦。3. 安装麒麟系统到虚拟机3.1 启动安装命令完整的QEMU启动命令如下qemu-system-aarch64 \ -m 4096 \ -cpu cortex-a72 \ -smp 4 \ -M virt \ -bios QEMU_EFI.fd \ -device nec-usb-xhci \ -device usb-kbd \ -device usb-mouse \ -device VGA \ -drive ifnone,filekylin.iso,idcdrom,mediacdrom \ -device virtio-scsi-device \ -device scsi-cd,drivecdrom \ -drive ifnone,filekylin_disk.qcow2,idhd0 \ -device virtio-blk-device,drivehd0这个命令有几个关键参数需要注意-m指定内存大小建议不少于4GB-cpu选择cortex-a72模拟飞腾处理器-drive参数要正确指向ISO和虚拟磁盘文件我第一次尝试时忘了指定UEFI固件结果虚拟机启动后黑屏。后来加上-bios参数才解决问题这个坑希望大家能避开。3.2 图形化安装过程启动后会进入麒麟系统的图形安装界面这个过程和实体机安装基本一致。有几点经验分享分区时建议选择自动分区省时省力语言环境记得勾选中文支持创建用户时密码复杂度要足够否则可能无法继续安装时间取决于主机性能在我的i7笔记本上大约需要30分钟。安装完成后记得移除ISO启动项否则下次启动又会进入安装界面。4. 优化虚拟机性能4.1 启用KVM加速如果你的主机支持虚拟化可以启用KVM加速来提升性能。修改启动命令如下-enable-kvm \ -accel kvm \这个改动能让虚拟机性能提升3-5倍。我在一台支持VT-x的服务器上测试编译速度从原来的15分钟缩短到了4分钟。4.2 网络配置技巧默认的NAT网络模式可能无法满足开发需求。建议使用桥接模式-net nic,modelvirtio \ -net tap,ifnametap0,scriptno,downscriptno配置桥接网络需要主机系统支持Windows用户可能需要额外安装TAP驱动。我在Ubuntu主机上配置桥接后虚拟机获得了和物理机同网段的IPSSH访问非常方便。5. 常见问题解决方案5.1 启动卡在UEFI界面如果启动时一直停留在UEFI shell界面可能是启动顺序不对。在UEFI界面执行fs0: cd EFI/kylin grubaa64.efi这个问题在新版QEMU中较少出现但遇到时确实让人头疼。建议保存这段命令以备不时之需。5.2 图形界面显示异常如果遇到图形界面花屏或闪烁可以尝试改用virtio-gpu-device virtio-gpu-pci \我在一台老旧的开发机上就遇到了这个问题改用virtio-gpu后显示立即正常了。这让我意识到模拟设备的兼容性差异比想象中要大。6. 实际应用场景6.1 软件开发测试在这个虚拟环境中我成功运行了基于飞腾架构编译的软件。通过交叉编译QEMU测试的工作流大大提升了开发效率。特别是调试一些硬件相关的bug时能够快速复现问题。6.2 系统兼容性验证我们还用这套环境测试了各种国产软件在ARM架构下的兼容性。相比购买实体设备虚拟机的快照功能让我们可以快速回退到干净状态测试效率提升了60%以上。