在麒麟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系统应显示类似以下信息:
NAME="Kylin Linux Advanced Server" VERSION="V10 (SP2)" ID="kylin" ID_LIKE="fedora" VERSION_ID="V10"1.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.4
2.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-list=aarch64-softmmu \ --enable-kvm --enable-virtfs \ --prefix=/usr/local/qemu-8.0.4关键配置参数说明:
--target-list=aarch64-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_forward=14. 安装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,gl=on \ -drive file=kylin_arm64.qcow2,if=virtio \ -cdrom Kylin-Server-V10-SP2-ARM64.iso \ -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ -device virtio-net-device,netdev=net0 \ -boot menu=on关键参数说明:
-m 4096:分配4GB内存-smp 4:使用4个CPU核心-display gtk,gl=on:启用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,gl=on \ -drive file=kylin_arm64.qcow2,if=virtio \ -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ -device virtio-net-device,netdev=net05.1 性能优化建议
为了提高虚拟机运行效率,可以考虑以下优化措施:
启用KVM加速(如果宿主机支持):
-enable-kvm使用virtio设备:
-device virtio-blk-device,drive=hd0 \ -device virtio-net-device,netdev=net0调整CPU模型:
-cpu host增加缓存选项:
-drive file=kylin_arm64.qcow2,if=virtio,cache=writeback
5.2 常见问题解决
问题1:启动时卡在EFI Shell
解决方法:在EFI Shell中手动启动:
fs0: cd EFI/BOOT BOOTAA64.EFI问题2:网络无法连接
检查步骤:
- 确认宿主机tap0接口已正确配置
- 检查虚拟机内网络配置
- 验证路由和防火墙规则
问题3:图形界面卡顿
尝试以下改进:
- 增加显存分配:
-vga virtio -global virtio-gpu.blob=true -global virtio-gpu.max_hostmem=4096 - 使用SDL显示后端替代GTK:
-display sdl
6. 高级配置与应用
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 port=5900,addr=127.0.0.1,disable-ticketing \ -drive file=kylin_arm64.qcow2,if=virtio \ -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ -device virtio-net-device,netdev=net0然后使用virt-viewer或remote-viewer连接:
remote-viewer spice://127.0.0.1:59006.2 配置共享文件夹
实现宿主机与虚拟机之间的文件共享:
启动QEMU时添加virtio-fs设备:
-object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on \ -device virtio-fs-pci,queue-size=1024,memdev=mem,tag=myfs在虚拟机中挂载共享目录:
mount -t virtiofs myfs /mnt
6.3 使用cloud-init自动化配置
对于批量部署,可以结合cloud-init实现自动化配置:
创建cloud-init配置ISO:
cloud-localds --network-config=network-config-v2.yaml config.iso user-data.yaml meta-data.yaml启动时附加配置ISO:
-cdrom config.iso
在实际项目中,这套环境已经成功用于多个ARM64软件的移植测试工作。特别是在国产化替代过程中,能够有效解决开发初期硬件资源不足的问题。