Pve虚拟机直通AMD显卡
机器:MS-A1
CPU:AMD 8700G
编辑grub、添加设备黑名单
vim /etc/default/grub
#添加以下:
GRUB_CMDLINE_LINUX_DEFAULT="quiet initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"
# 更新grub
update-grub
initcall_blacklist=sysfb_init
启动时运行黑名单内添加项,在 Intel
的机型中,此项非必要添加,但是在 amd
机型中建议添加,否则会影响核显直通后的性能,比如4K60Hz降低到30Hz。
vim /etc/modprobe.d/pve-blacklist.conf
blacklist nvidiafb
# 添加
blacklist amdgpu
blacklist i915
blacklist snd_hda_intel
options vfio_iommu_type1 allow_unsafe_interrupts=1
屏蔽 amd
显卡驱动,options vfio_iommu_type1 allow_unsafe_interrupts=1
允许不安全的设备中断,在部分机型上不加此项会导致虚拟 Win
启动加载转圈时直接宿主 PVE
卡死
# 更新initramfs:
update-initramfs -u -k all
# 重启
reboot
在设备黑名单中添加 amdgpu
,并grub里开启引导自动加载后,PVE
启动时界面会卡死。是正常的!等待一会只要 PVE
可以通过网页访问到 WebUI
管理页面就是正常没问题的。因为 PVE
开机时会按照设备黑名单设置的,释放对核显的控制权。这样才能在核显直通给虚拟Win的时候避免冲突而导致的无法加载驱动,错误代码43
直通设置
更新 pcie
列表信息
update-pciids
查看核显的 pcid
和声卡的供应商id和设备id
root@pve:~# lspci -D -nn | grep VGA
0000:66:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Phoenix1 [1002:15bf] (rev 06)
root@pve:~# lspci -D -nn | grep Audio
0000:66:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Rembrandt Radeon High Definition Audio Controller [1002:1640]
0000:66:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] ACP/ACP3X/ACP6x Audio Coprocessor [1022:15e2] (rev 63)
0000:66:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h/19h/1ah HD Audio Controller [1022:15e3]
提取gop、vbios
提取BIOS
因为我的机器在官网没有 BIOS
文件的下载,所以需要手动提取。需要准备一个U盘,格式化为 FAT32
,把下面提供的 EFI
放进去之后插入机器使用U盘启动,执行
ftp_bk.nsh
然后会生成一个 backup.bin
的文件在U盘中,这个就是后续需要用到的 BIOS
。
提取AMDGopDriver.efi
下载:UBU工具
进入UBU目录,双击 ubu.bat
,选择文件 backup.bin
选择 2
选择 X
等待执行完成就能在 UBU
文件加目录看到 Extracted/GOP/3.8.8_NoSign/AMDGopDriver.efi
文件。
提取AMDGopDriver.rom
下载:edk2-BaseTools-win32-master
把 AMDGopDriver.efi
拷贝到 edk2-BaseTools-win32-master
文件夹,
CMD
命令行进入 edk2-BaseTools-win32-master
文件夹,运行
EfiRom.exe -f 0x<VendorID: 1022> -i 0x<你的核显设备ID:15e2> -e AMDGopDriver.efi
成功后会出现 AMDGopDriver.rom
文件。
提取vbios
下载:vbios提取工具
SSH连接Pve宿主机,上传vbios提取工具执行
./vbios
成功会输出文件:vbios_1002_15bf.bin
把提取到的**AMDGopDriver.rom
和 vbios_1002_15bf.bin
放到 /usr/share/kvm
**
直通核显
直通声卡
配置虚拟机
nano /etc/pve/qemu-server/<VM_ID>.conf
找到刚刚添加的 PCI
设备,添加 romfile
hostpci0: 0000:66:00.0,pcie=1,x-vga=1,romfile=vbios_1002_15bf.bin
hostpci1: 0000:66:00.1,romfile=AMDGopDriver.rom