AIGC标识 在银河麒麟桌面 V10(ARM64)上用 KVM 安装统信 UOS 桌面 25系统

在银河麒麟桌面 V10(ARM64)上用 KVM 安装统信 UOS 桌面 25系统

本文是在AI的协作下完成安装UOS并能正常显示,然后生成的备忘,目的是让后来者能够搜到资料少走弯路。

在麒麟 9000X 的银河麒麟桌面 V10 SP1 上,用本机 KVM 装了一台统信 UOS 桌面 25 专业版(ARM64)。安装过程里图形界面几次全黑或花屏,装完后又卡在 800×600。下面按实际踩坑顺序记录,方便以后在同类型 ARM 机器上重做。

环境

宿主机:

  • 银河麒麟桌面操作系统 V10 SP1,aarch64

  • CPU:HUAWEI Kirin 9000X(带 SVE / SVE2)

  • QEMU 4.2.1,libvirt 6.0.0,virt-install 2.2.1

  • UEFI 固件:/usr/share/AAVMF/AAVMF_CODE.fd

客户机:

  • 统信 UOS 桌面 25 专业版 ARM64 安装镜像

  • 4 核、8 GB 内存、80 GB 磁盘

  • 显示:virtio 显卡,1920×1080,SPICE 只监听 127.0.0.1

镜像必须是 arm64 / aarch64。x86_64 或 loongarch 的 ISO 不能在这台宿主机上用 KVM 直接安装。

最终能用的做法

ARM 虚拟机要用 UEFI,不能用传统 BIOS。磁盘和网卡用 virtio。安装阶段先用 ramfb 才能看见固件和安装界面;系统进桌面之后,再换成 virtio 显卡才能到 1080p。

内核参数必须带 arm64.nosve。这台机器的 QEMU 4.2 不会把宿主机的 SVE 正确交给客户机,UOS 6.6 内核会在 sve_get_vl 里直接 panic,表现就是黑屏、CPU 却还有占用。

连接安装界面或桌面:

virt-viewer --connect qemu:///system uos-desktop-25

 

过程里真正卡住的地方

 1. 虚拟机建出来了,但没在装系统

第一次 virt-install 被中断。域还在,磁盘几乎是空的,光驱里没有 ISO,启动顺序还是先硬盘后光驱。看起来像“已经在装”,实际上固件无盘可引导。

处理:删掉未完成的域和空盘,重新创建,并确认 XML 里的 CDROM 有 source file 指向 ISO,启动顺序是光驱优先。

2. 窗口只有 Guest disabled display

SPICE 配 virtio 显卡时,客户机驱动还没打开显示,virt-viewer 就只显示这句。安装程序其实可能已经在跑。

aarch64 上,EDK2 固件画的是 ramfb,不是 virtio-gpu。安装阶段应把显卡换成 ramfb,而且 ramfb 不是 PCI 设备,XML 里不能给它挂 PCI 地址,否则 QEMU 直接退出。

3. 进了 UEFI Shell,没有安装菜单

固件能看见光盘,但不从它启动。常见原因是 ISO 没挂上,或者只写了 <boot dev='cdrom'/>,没有在磁盘设备上写 <boot order='1'/>。这版 libvirt / AAVMF 更认设备上的 boot order。

另外,UOS 的安装 ISO 是标准的 El Torito UEFI 镜像,里面有 EFI/BOOT/BOOTAA64.EFI。自做的小 ISO 如果只把 EFI 文件直接塞进 El Torito,而不做成 FAT 格式的 efi.img,固件同样会掉进 Shell。

4. 一进 GRUB 就花屏

UOS 安装盘的 GRUB 会把分辨率设成 1920×1080,并带图形背景。QEMU 4.2 的 ramfb 在这个分辨率下画出来是条纹花屏,菜单点不到。

安装阶段把显示限制在 ramfb 能稳定显示的模式(这次实际可用的是 800×600)。不要在安装盘的 GRUB 里强行上 1080p。

5. 第二块 virtio 盘,GRUB 读不了

固件把第一块 virtio 盘报告成 512 字节扇区,后面的 virtio 盘却报成 262144 字节。GRUB 2.12 直接拒绝这种扇区,所以安装 ISO 如果做成第二块盘,GRUB 里 ls 不到 /live/vmlinuz。

绕过办法:把 ISO 里的 vmlinuz 和 initrd.img 放到 GRUB 能读的那块盘上,用自己的 GRUB 去加载;ISO 仍然挂着,给 live 系统在内核起来之后找 squashfs。内核起来后走的是 Linux 自己的 virtio 驱动,不受固件这个扇区错误影响。

6. 内核一启动就 panic

串口上的第一行有效报错是:

Unhandled 64-bit el1h sync exception
ESR 0x1fe00000 -- ASIMD
pc : sve_get_vl

Kirin 9000X 有 SVE/SVE2。新内核会按 CPU ID 去探测 SVE,但 QEMU 4.2 没有把 SVE 配进 KVM 客户机,指令一执行就异常。

启动参数加上:

arm64.nosve

安装器就能继续。这个参数要写进已经装好的系统的 GRUB,不能只加在安装盘上。否则第一次从硬盘启动会再次黑屏。

改的是启动分区里的 grub/grub.cfg(分区标签是 Boot)。/boot 在这块分区上是指向当前目录的符号链接,所以 GRUB 里的 /boot/vmlinuz-... 是对的。

7. 装完是 800×600,应用显示不全

ramfb 加上固件默认模式,桌面稳定在 800×600。给 ramfb 写 1920×1080,客户机仍会把模式改回 800×600。

桌面能进之后,把显卡换成 virtio,并在 QEMU 命令行固定分辨率:

-set device.video0.xres=1920
-set device.video0.yres=1080

同时去掉内核参数里的 nomodeset,否则内核不会去做 virtio-gpu 的 modeset。重启后 virt-viewer 里是 1920×1080。窗口如果还是旧尺寸,关掉再连一次。

注意事项

  • 不要用 virt-install --wait -1 干等安装结束。创建成功后用 virt-viewer 操作,装完再关虚拟机。

  • 安装第一次配置还没走完时不要强制断电。这次中途重启触发过“文件系统异常,无法启动”,需要把 root 和数据分区挂载一次以回放日志,再干净卸载。

  • arm64.nosve 写在生成出来的 grub.cfg 里。以后客户机里如果执行 update-grub,这个参数可能被冲掉,需要再加回 /etc/default/grub 的 GRUB_CMDLINE_LINUX。UOS 25 是不可变系统,真正生效的配置在 Boot 分区的 GRUB,而不一定在根分区的 /etc/default/grub。

  • 显卡分两段:安装用 ramfb,进桌面后用 virtio 1080p。安装阶段就上 virtio,多半只有 Guest disabled display。

  • SPICE 只绑在本机。同一台机器上用 virt-viewer 或虚拟机管理器即可,不必对局域网开放。

  • 磁盘最后用的是 80 GB raw 镜像,不是最初那个几乎为空的 qcow2。重装脚本如果会删盘,确认里面没有已经装好的系统。

posted @ 2026-09-22 10:59  Bruce_Cheung  阅读(41)  评论(0)    收藏  举报