在麒麟V10 X86系统中编译QEMU 8.0.4并运行ARM64虚拟机的完整指南对于信创领域的开发者和适配工程师来说在X86架构的国产操作系统上模拟ARM64环境是一项常见需求。本文将详细介绍如何在麒麟V10 X86系统中从零开始编译安装QEMU 8.0.4并成功启动ARM64架构的虚拟机。1. 环境准备在开始之前请确保您的麒麟V10 X86系统已经安装完毕并可以正常使用。建议系统版本为Kylin V10 SP2或更高版本以获得更好的兼容性支持。首先需要检查系统的基本信息cat /etc/os-release uname -a系统应显示类似以下信息NAMEKylin Linux Advanced Server VERSIONV10 (SP2) IDkylin ID_LIKEfedora VERSION_IDV101.1 安装基础开发工具编译QEMU需要一系列开发工具和库文件的支持。执行以下命令安装必要组件sudo yum groupinstall Development Tools -y sudo yum install -y git wget flex bison zlib-devel glib2-devel \ pixman-devel libfdt-devel ninja-build python3注意如果您的系统使用的是dnf而非yum请相应地将命令中的yum替换为dnf。1.2 升级GCC编译器QEMU 8.0.4需要较新版本的GCC编译器支持。麒麟V10默认安装的GCC版本可能较低建议升级到7.4.0或更高版本sudo yum install -y centos-release-scl sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c scl enable devtoolset-9 bash验证GCC版本gcc --version2. 编译安装QEMU 8.0.42.1 获取QEMU源代码从官方镜像站下载QEMU 8.0.4的源代码包wget https://download.qemu.org/qemu-8.0.4.tar.xz tar xvJf qemu-8.0.4.tar.xz cd qemu-8.0.42.2 配置编译选项创建一个独立的构建目录并配置编译选项mkdir build cd build ../configure --target-listaarch64-softmmu \ --enable-kvm --enable-virtfs \ --prefix/usr/local/qemu-8.0.4关键配置参数说明--target-listaarch64-softmmu指定编译ARM64架构模拟器--enable-kvm启用KVM加速支持--prefix指定安装路径2.3 编译与安装使用多线程编译以加快速度make -j$(nproc) sudo make install编译完成后将QEMU添加到系统路径echo export PATH/usr/local/qemu-8.0.4/bin:$PATH ~/.bashrc source ~/.bashrc验证安装qemu-system-aarch64 --version3. 准备ARM64虚拟机环境3.1 获取必要的固件文件运行ARM64虚拟机需要一些额外的固件支持wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd wget https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/vmlinuz-4.15.0-rc63.2 创建虚拟磁盘使用qemu-img工具创建虚拟磁盘文件qemu-img create -f qcow2 kylin_arm64.qcow2 120G提示qcow2格式支持动态分配空间实际占用的磁盘空间会随着使用量增加而增长。3.3 配置网络设置TAP网络接口以实现虚拟机网络连接sudo ip tuntap add tap0 mode tap sudo ip link set tap0 up sudo ip addr add 192.168.100.1/24 dev tap0 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo sysctl -w net.ipv4.ip_forward14. 安装ARM64版麒麟系统4.1 启动安装程序假设您已经获取了Kylin-Server-V10-SP2-ARM64.iso安装镜像使用以下命令启动安装qemu-system-aarch64 \ -m 4096 \ -cpu cortex-a72 \ -smp 4 \ -M virt \ -bios QEMU_EFI.fd \ -device virtio-gpu-pci \ -display gtk,glon \ -drive filekylin_arm64.qcow2,ifvirtio \ -cdrom Kylin-Server-V10-SP2-ARM64.iso \ -netdev tap,idnet0,ifnametap0,scriptno,downscriptno \ -device virtio-net-device,netdevnet0 \ -boot menuon关键参数说明-m 4096分配4GB内存-smp 4使用4个CPU核心-display gtk,glon启用GTK显示界面和OpenGL加速4.2 完成系统安装安装程序启动后按照图形界面提示完成系统安装。安装过程与物理机安装基本相同主要包括选择安装语言和时区磁盘分区建议使用自动分区设置root密码和创建用户选择需要安装的软件包注意安装过程中可能会提示没有网络连接这是因为我们使用了TAP网络。安装完成后可以手动配置网络。5. 运行ARM64虚拟机安装完成后可以使用以下命令启动虚拟机qemu-system-aarch64 \ -m 4096 \ -cpu cortex-a72 \ -smp 4 \ -M virt \ -bios QEMU_EFI.fd \ -device virtio-gpu-pci \ -display gtk,glon \ -drive filekylin_arm64.qcow2,ifvirtio \ -netdev tap,idnet0,ifnametap0,scriptno,downscriptno \ -device virtio-net-device,netdevnet05.1 性能优化建议为了提高虚拟机运行效率可以考虑以下优化措施启用KVM加速如果宿主机支持-enable-kvm使用virtio设备-device virtio-blk-device,drivehd0 \ -device virtio-net-device,netdevnet0调整CPU模型-cpu host增加缓存选项-drive filekylin_arm64.qcow2,ifvirtio,cachewriteback5.2 常见问题解决问题1启动时卡在EFI Shell解决方法在EFI Shell中手动启动fs0: cd EFI/BOOT BOOTAA64.EFI问题2网络无法连接检查步骤确认宿主机tap0接口已正确配置检查虚拟机内网络配置验证路由和防火墙规则问题3图形界面卡顿尝试以下改进增加显存分配-vga virtio -global virtio-gpu.blobtrue -global virtio-gpu.max_hostmem4096使用SDL显示后端替代GTK-display sdl6. 高级配置与应用6.1 使用SPICE协议远程连接对于服务器环境可以使用SPICE协议进行远程连接qemu-system-aarch64 \ -m 4096 \ -cpu cortex-a72 \ -smp 4 \ -M virt \ -bios QEMU_EFI.fd \ -device virtio-gpu-pci \ -vga none \ -spice port5900,addr127.0.0.1,disable-ticketing \ -drive filekylin_arm64.qcow2,ifvirtio \ -netdev tap,idnet0,ifnametap0,scriptno,downscriptno \ -device virtio-net-device,netdevnet0然后使用virt-viewer或remote-viewer连接remote-viewer spice://127.0.0.1:59006.2 配置共享文件夹实现宿主机与虚拟机之间的文件共享启动QEMU时添加virtio-fs设备-object memory-backend-file,idmem,size4G,mem-path/dev/shm,shareon \ -device virtio-fs-pci,queue-size1024,memdevmem,tagmyfs在虚拟机中挂载共享目录mount -t virtiofs myfs /mnt6.3 使用cloud-init自动化配置对于批量部署可以结合cloud-init实现自动化配置创建cloud-init配置ISOcloud-localds --network-confignetwork-config-v2.yaml config.iso user-data.yaml meta-data.yaml启动时附加配置ISO-cdrom config.iso在实际项目中这套环境已经成功用于多个ARM64软件的移植测试工作。特别是在国产化替代过程中能够有效解决开发初期硬件资源不足的问题。