官网已经出过指导教程,官方出品,必属你看不懂系列,所以就观摩一下就行。

https://pve.proxmox.com/wiki/Pci_passthrough

一、开启PVE核显直通

1、启动内核IOMMU支持

打开PVE节点的shell,输入命令:

nano /etc/default/grub

#将GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"

修改完成之后更新grub

update-grub

加载内核模块

nano /etc/modules

添加以下模块

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

2.添加驱动到PVE黑名单

nano /etc/modprobe.d/blacklist.conf

添加驱动

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

3.查找核显通道ID

输入命令

lspci
00:02.0 VGA compatible controller: Intel Corporation GeminiLake [UHD Graphics 600]

我的核显的PCIE ID 为00:02.0 取前两位数就是00:02

4.查询对应硬件ID

lspci -n -s 00:02      #查询显卡  00:02 以上获取的ID

从以上可以查询到显卡硬件ID为8086:3185

5.填上以上ID,添加直通组。多个设备,ids后面每个设备之间用,隔开

nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:3185

6.添加options防止VM死机

nano /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

7.更新内核并重启PVE虚拟机

update-initramfs -u

8.重启完成后,输入命令检查模块是否加载成功

lsmod | grep vfio

二、为PVE虚拟机安装编译gcc工具、Git工具,make工具

1.更新源

apt-get update

2.安装gcc编译工具

apt-get install gcc

查询gcc版本

gcc --version

3.安装Git工具

apt-get install git 

4.安装make工具

apt-get install make

三、编译官方提供的核显rom修复工具

git clone https://github.com/awilliam/rom-parser
cd rom-parser
make

四、导出核显ROM

1.之前输入lspci查询到核显的通道ID 为00:02.0

2.进入路径

cd /sys/bus/pci/devices/
ls

找到里面核显的设备文件夹

进入这个文件夹

cd 0000:00:02.0

3.开始导出核显rom

echo 1 > rom
cat rom > /tmp/vbios.rom
echo 0 > rom

在winscp进入PVE的tmp目录就可以看到导出的核显rom

五、查询导出核显的硬件设备ID

cd rom-parser 
./rom-parser /tmp/vbios.rom

这里会发现我们导出的核显rom 硬件设备ID为8086:0406, 这个是存在问题的,通过之前的步骤我们查询到的核显设备ID应该为8086:3185,这个才是正确的,所以我们要借助rom-parser编译出来的修复文件进行修复

六、修复核显ROM的设备通道ID

cd
cd rom-parser 
./rom-fixer /tmp/vbios.rom

七、检查核显是否能直出直通

nano /etc/pve/qemu-server/100.conf

在顶部加入这行代码,代表直通核显直出核显

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=vbios.rom