Ubuntu 22.04LTS环境下Virt-manager中AMD 7800XT GPU直通异常问题求助
Ubuntu 22.04LTS环境下Virt-manager中AMD 7800XT GPU直通异常问题求助
大家好,我目前在Ubuntu 22.04LTS上用Virt-manager管理虚拟机,手里有两张显卡:NVIDIA 3060(留给宿主机使用)和AMD 7800XT(计划直通给Win11虚拟机)。我已经完成了基础的直通配置流程,但遇到了棘手的异常问题,想请各位帮忙分析解决。
已完成的直通基础配置
启用IOMMU并绑定VFIO驱动
我先在UEFI中开启了IOMMU功能,确认正常工作后,找到了AMD 7800XT的PCIe设备信息:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:747e] (rev c8) Kernel driver in use: vfio-pci 03:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab30] Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab30] Kernel driver in use: vfio-pci
注:原本这两个设备的驱动分别是
amdgpu和snd_hda_intel,现在已成功切换绑定到vfio-pci
修改GRUB启动参数
我编辑了/etc/default/grub文件,添加了IOMMU和VFIO相关配置:
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt vfio.pci.ids=1002:747e,1002:ab30"
修改完成后重启系统,确认IOMMU和直通基础功能正常。
配置模块加载优先级
为了避免宿主机抢占AMD显卡资源,我创建了/etc/modprobe.d/vfio.conf文件,内容如下:
options vfio-pci ids=1002:747e,1002:ab30 softdep amdgpu pre: vfio-pci
随后执行了更新initramfs的命令:
sudo update-initramfs -u
再次重启后,确认设备依然稳定绑定在vfio-pci驱动上:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:747e] (rev c8) Subsystem: ASUSTeK Computer Inc. Device [1043:05fd] Kernel driver in use: vfio-pci Kernel modules: amdgpu 03:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab30] Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab30] Kernel driver in use: vfio-pci Kernel modules: snd_hda_intel
Virt-Manager虚拟机配置
创建Win11虚拟机时,我做了以下关键配置:
- 芯片组:Q35
- 固件:UEFI x86_64(路径为
/usr/share/OVMF/OVMF_CODE_4M.fd) - 直通了AMD 7800XT的VGA设备和配套音频设备
- 完成Win11 Pro标准安装后,安装了Virtio驱动并重启,虚拟机系统运行正常
遇到的具体问题
在Win11虚拟机中安装AMD官方驱动时,出现了一系列异常现象:
- 启动AMD Software安装程序时弹出错误提示,点击确定后可继续流程
- 选择推荐的RX 7800XT驱动开始下载时,再次弹出错误,点击确定后下载能完成
- 驱动安装完成后,安装程序提示“一切正常”,但将显示器HDMI线接到AMD显卡上时,屏幕完全黑屏
- 重启虚拟机后,设备管理器中的AMD显卡报错误代码43,Adrenalin软件也无法正常识别显卡
已尝试的解决方案
- 用完全相同的流程直通NVIDIA 3060到Win11虚拟机,全程无异常,驱动安装和显示功能均正常
- 查找过关于提供显卡ROM文件、绕过驱动虚拟机检测的相关方案,但尝试后未解决问题
我猜测可能是新款AMD显卡内置了虚拟机检测机制,导致驱动无法正常工作,但不清楚具体该从何处入手绕过限制。如果有任何细节我描述得不够清楚,欢迎随时提问,我会补充相关信息。非常感谢大家的帮助!
备注:内容来源于stack exchange,提问作者cookiemonster




