参考地址:pve系列: amd显卡直通
方案目标:
✅ 让宿主系统完全不使用核显(包括关闭 EFI framebuffer 和 amdgpu 驱动加载),
✅ 让核显被 VFIO 接管,从而可以 passthrough 给虚拟机。
⚙️ 总体流程
- 启用 IOMMU + ACS override
- 屏蔽宿主系统对核显的使用(禁用 EFI framebuffer + amdgpu)
- 使用 EFI stub 启动 Linux 内核,避免系统初始化时触碰显卡
- VFIO 接管核显(通过 PCI ID)
- 验证成功后绑定到 VM
✅ 一步步实现
🧩 Step 1:启用 IOMMU + 禁用 EFI framebuffer
编辑 grub 配置文件:
nano /etc/default/grub
将原本的:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为如下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off pcie_acs_override=downstream"
解释:
amd_iommu=on iommu=pt:开启 IOMMU 直通pcie_acs_override=downstream:强制打散 IOMMU groupvideo=efifb:off:关闭 EFI framebuffer(防止内核绑定核显)
保存后,更新 grub:
update-grub
🧩 Step 2:使用 VFIO 接管核显与HDMI音频
找到核显/HDMI的设备 ID:
lspci -nn | grep VGA
lspci -nn | grep -i audio
输出显卡和HDMI音频信息:
e5:00.0 VGA compatible controller [0300]: AMD/ATI Rembrandt [Radeon 680M] [1002:1681]
e5:00.1 Audio device [0403]: Advanced Micro Devices, Inc. Rembrandt HDMI Audio [1002:1640]
所以创建 VFIO 绑定配置:
echo "options vfio-pci ids=1002:1681,1002:1640" | tee /etc/modprobe.d/vfio.conf
并屏蔽宿主加载 amdgpu:
echo "blacklist amdgpu" | tee /etc/modprobe.d/blacklist-amdgpu.conf
同理添加以下黑名单:
blacklist radeon
blacklist snd_hda_intel
blacklist drm_kms_helper
blacklist drm
🧩 Step 3:启用 VFIO 模块提前加载
编辑文件 /etc/initramfs-tools/modules,加入以下内容:
vfio
vfio_pci
vfio_iommu_type1
vfio_virqfd
🧩 Step 4:更新 initramfs 并重启
执行以下命令:
update-initramfs -u -k all
reboot
🧪 Step 5:验证 VFIO 是否接管核显
重启后执行:
lspci -nnk -d 1002:1681
输出应为:
Kernel driver in use: vfio-pci
如果是 amdgpu,说明有步骤未成功。
🧩 Step 6:编辑 VM 配置,绑定核显
这是很重要的一个步骤,添加vbios让虚拟机可以正常初始化加载直通显卡,否则驱动安装失败,显卡无法使用。
下载对应核显CPU型号(此处为6800H)的rom及bin文件:
下载好的rom及bin文件放入pve宿主机的/usr/share/kvm目录下
编辑你的 VM 配置:
nano /etc/pve/qemu-server/100.conf
添加(ID、ROM、BIN一定与上述名称对应一致):
hostpci0: e5:00.0,pcie=1,x-vga=1,romfile=vbios_6800h.bin
hostpci1: e5:00.1,romfile=AMDGopDriver_6800H.rom
PVE虚拟机配置信息:
BIOS:OVMF(UEFI)(提前添加EFI硬盘)
显示:无
机型:q35
额外提示:Windows虚拟机及驱动安装好后,验证所有功能OK后,可以打Reset Bug的补丁:RadeonResetBugFix