近年来,在政府的推动下,国产操作系统(主要是统信 UOS 和麒麟 OS)以及相关软件的市场份额不断扩大。越来越多的企业和事业单位开始采用国产操作系统和软件,国产化替代进程正如火如荼地进行。目前,信创产业链上下游百花齐放,国产芯片领域更是群雄并起,如麒麟、兆芯、海光、龙芯、飞腾、申威等。作为产业链中的一环,软件开发者也面临一个普遍问题:需要适配多种硬件平台。
前几天,一位客户询问我们是否提供飞腾架构统信 UOS 下的软件版本。我们之前已经适配了 Windows、兆芯(x86)UOS 和麒麟等平台,但尚未支持飞腾架构。经过查询得知,飞腾 FT-D2000 兼容 64 位 ARMv8 指令集。看到是 ARM64 架构时,我心中有了底,因为此前我们已经做过麒麟 OS ARM 版本的移植,理论上咱们的软件可以直接在飞腾版本的统信 UOS 上运行。即使存在细微差异,经过简单适配也能解决。
然而,我们面临一个现实问题:手头没有搭载飞腾处理器的设备,而在需求尚不明确的情况下,采购一台新设备并不现实。
由于仅需验证软件包是否能够在该平台上运行,且主要关注基本功能的正常性,我们决定使用虚拟机方案。然而,像 VirtualBox 等常见虚拟机并不支持在 x86 架构的设备上创建 ARM 虚拟机,所以我们将目光投向了 QEMU。
QEMU
QEMU 是一个功能强大的开源仿真器和虚拟化工具,能够在不同硬件架构上运行虚拟机。它支持多种硬件架构的仿真,包括 ARM、x86、MIPS 和 RISC-V 等,能够完全仿真目标系统的 CPU、内存、网络和 I/O 设备等。对于 ARM 仿真,QEMU 提供了多种 ARM 处理器和开发板模型,可以运行常见的 ARM 操作系统,如 Linux、Android 等。
在 UOS V20 系统上安装 QEMU 非常简单,只需执行以下命令:
$ sudo apt install qemu-system qemu-efi-aarch64
安装完成后,可通过以下命令查看 QEMU 版本信息:
$ qemu-system-aarch64 --version
QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg.1-1+dde)
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers
创建模拟器
QEMU 需要一个虚拟硬盘来安装操作系统。使用 qemu-img
工具创建虚拟硬盘:
$ qemu-img create -f qcow2 uos-arm64-disk.qcow2 100G
Formatting 'uos-arm64-disk.qcow2', fmt=qcow2 size=107374182400 cluster_size=65536 lazy_refcounts=off refcount_bits=16
这里的 100G 是虚拟硬盘的大小,可根据实际需求调整。
QEMU 支持 ARM64 的 UEFI 启动,相关的 UEFI 镜像文件会在安装 QEMU 时自动安装,默认路径为 /usr/share/qemu-efi-aarch64/QEMU_EFI.fd
。如文件缺失,可执行以下命令重新安装:
$ sudo apt install qemu-efi-aarch64
接下来,请从统信官网上下载 UOS 安装镜像,地址如下:
https://www.chinauos.com/resource/download-professional
UOS 的版本比较多,一定下载正确的版本,我们选择飞腾适配版本:
下载完毕后,最好校验一下 md5 值,避免由于下载文件不完整造成安装失败。
$ md5sum uos-desktop-20-professional-1070-arm64-202408.iso
8757bd794ec7f7d6af13ed4053c2c92a uos-desktop-20-professional-1070-arm64-202408.iso
安装 UOS V20 飞腾版
准备工作完成后,即可在虚拟机中安装 UOS V20 飞腾版。将下载的系统镜像和虚拟硬盘文件置于同一目录,执行以下命令启动虚拟机:
qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 8 -m 8096 \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
-device virtio-gpu-pci,xres=1920,yres=1080 \
-display gtk \
-device usb-ehci -device usb-tablet -device usb-kbd \
-drive if=none,file=uos-arm64-disk.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-cdrom uos-desktop-20-professional-1070-arm64-202408.iso \
-netdev user,id=net0 -device virtio-net-device,netdev=net0
qemu 命令行参数比较多,这里简单说明一下各个参数的含义:
-M virt:指定 ARM 的虚拟机类型。
-cpu cortex-a72:指定虚拟 CPU 类型。
-smp 8:设置虚拟机 CPU 核心数为 8 个。
-m 8096:为虚拟机分配 8GB 内存,可根据需要调整。
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd:UEFI 镜像文件
-device virtio-gpu-pci,xres=1920,yres=1080:启用 virtio 图形设备,并指定分辨率
-device usb-ehci -device usb-tablet -device usb-kbd:为虚拟机配置鼠标、键盘支持。
-drive if=none,file=uos-arm64-disk.qcow2,id=hd0:指定虚拟硬盘文件。
-device virtio-blk-device,drive=hd0:使用 virtio 作为硬盘驱动,提升虚拟机性能。
-cdrom uos-desktop-20-professional-1070-arm64-202408.iso:挂载 ISO 文件,虚拟光驱。
-netdev user,id=net0 -device virtio-net-device,netdev=net0:为虚拟机配置网络支持。
这其中可能需要注意的,虚拟机支持多种显示设备虚拟,如 std, virtio, cirrus, 或 qxl。使用 std 最保险,但可能无法支持较高的分辨率。virtio、cirrus 等并不是在所有机器上都能比较好的虚拟,可能需要根据实际运行情况,调整一下,多尝试几回。
如果启动成功,将出现第一个安装界面:
敲一下回车键,然后耐心等待(这个过程需要多长时间,取决于你主机的性能,我这边大约等了两三分钟),出现图形安装界面。
接下来的安装过程和在 PC 上安装 UOS 一样,一般情况下使用默认安装即可。
重新启动,然后又是一阵等待,终于出现 UOS 的界面:
查看一下系统信息:
进入控制面板查看系统信息:
至此,整个系统安装就完成了。后面如果要启动这个虚拟的 UOS 系统,修改上面的命令,去掉挂载光盘参数:
qemu-system-aarch64 -M virt -cpu cortex-a72 -smp 8 -m 8096 \
-bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd \
-device virtio-gpu-pci,xres=1920,yres=1080 \
-display gtk \
-device usb-ehci -device usb-tablet -device usb-kbd \
-drive if=none,file=uos-arm64-disk.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0 -device virtio-net-device,netdev=net0
建议将该命令保存为脚本文件,便于日后快速启动。
小结
通过 QEMU 安装飞腾版 UOS 系统虽有一定的局限性,但在某些场景下,尤其是硬件资源有限的情况下,依然是一个不错的验证手段。然而,由于 x86 平台上 ARM 指令的纯软件仿真效率较低,运行过程中会出现明显的延迟。此方案更适合进行简单的测试和验证。
本文记录了安装过程,供有类似需求的开发者参考。如果有更好的方案,欢迎留言讨论。