如何配置aarch64架构KVM虚拟机的显示输出?
解决aarch64架构下Oracle Linux 9 U3 KVM虚拟机VNC黑屏与串口控制台无输出问题
一、修复VNC黑屏问题
- 修正OS变体参数:原命令用了
--os-variant=rhel7.0,Oracle Linux 9对应RHEL9分支,改成--os-variant=ol9或rhel9.0,错误的OS变体可能导致aarch64平台硬件模拟不匹配,尤其是UEFI相关配置。 - 指定UEFI固件与NVRAM文件:Ubuntu 22.04的aarch64 UEFI固件默认路径为
/usr/share/AAVMF/AAVMF_CODE.fd,需配合--nvram指定独立的变量存储文件(避免默认配置冲突),命令中添加:
注意--boot uefi,loader=/usr/share/AAVMF/AAVMF_CODE.fd --nvram /ssd/oracle_nvram.fd/ssd/oracle_nvram.fd要放在有读写权限的目录,建议和虚拟机磁盘同路径。 - 强制指定VirtIO显卡:添加
--video virtio参数,部分aarch64虚拟机对默认显卡模拟支持不佳,VirtIO显卡兼容性更好。
二、配置串口控制台支持
- 在virt-install中添加串口设备:直接给命令加参数,让虚拟机把控制台输出定向到串口:
之后可以用--console pty,target_type=serial --serial ptyvirsh console oracle连接串口控制台。 - 制作带串口参数的自定义镜像:如果原ISO没有串口支持,修改镜像的GRUB配置:
- 挂载原ISO:
mkdir /mnt/iso && mount -o loop /ssd/OracleLinux-R9-U3-aarch64-dvd.iso /mnt/iso - 复制镜像内容到临时目录:
cp -r /mnt/iso /tmp/ol9_custom - 修改GRUB配置文件(比如
/tmp/ol9_custom/EFI/BOOT/grub.cfg),在linux内核启动行末尾添加console=ttyAMA0,115200n8(aarch64平台串口设备通常为ttyAMA0)。 - 重新生成自定义ISO:
apt install genisoimage -y genisoimage -o /ssd/OracleLinux-R9-U3-aarch64-custom.iso -V "OL9U3" -J -R -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/ol9_custom
- 挂载原ISO:
三、完整修正后的virt-install命令示例
virt-install --virt-type kvm --name oracle --ram 4096 \ --location=/ssd/OracleLinux-R9-U3-aarch64-custom.iso \ --disk path=/ssd/OracleLinux-R9-U3-aarch64-cloud.qcow2,size=20 \ --network=default \ --graphics=vnc,listen=0.0.0.0 \ --os-type=linux --os-variant=ol9 \ --arch=aarch64 \ --boot uefi,loader=/usr/share/AAVMF/AAVMF_CODE.fd \ --nvram /ssd/oracle_nvram.fd \ --video virtio \ --console pty,target_type=serial --serial pty \ --noautoconsole
四、验证排查步骤
- 用
virsh dominfo oracle查看Firmware字段,确认UEFI已启用。 - 启动虚拟机后执行
virsh console oracle,若仍无输出,可在虚拟机启动时手动进入GRUB编辑模式,临时添加console=ttyAMA0,115200n8参数测试。 - 检查VNC端口监听:用
virsh domdisplay oracle获取端口,再用netstat -tulpn | grep <端口>确认是否在0.0.0.0监听,临时关闭ufw(ufw disable)排除防火墙干扰。
内容的提问来源于stack exchange,提问作者rory toma
相关产品推荐
相关产品推荐

