东北街溜子--PVE8.0下显卡直通

      在网上买了一个小主机J4125,准备把用于做all in one,在win10上准备直连电视平时上上网,打打游戏,这样就需要win10显卡直通,一路走来一路坑,终将成功安装win10并直通。    

一、进行设置bios

开机进入BIOS,进行BIOS设置,非常重要, 并与pve安装时相一致!

#设置VT-d为enabled

#设置CMS为enable

#Boot Mode Select 为UEFI Only

#Vide 设置为legcy


二、开启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

七、开始直通

首先创建一个虚拟机,名称自定义;


使用光盘镜像的方式安装系统,类别选择Microsoft Windows,版本选择10/2016/2019


机器类型选择q35, SCSI控制器为VirIO SCSI,BIOS为SeaBios


硬盘视情况而定,如果有空白硬盘可以选择直通给windows使用,这样效率最高,我这边没有空闲的硬盘了,所以只能虚拟一块50GB磁盘先用着,轻度使用应该是足够的;如果你是SSD可以勾选SSD仿真,这样可以提高效率;

CPU核心数视情况而定,一定要启用NUMA,CPU类别选择host;


内存视情况而定,内存和最小内存一定要一致(否则各种报错);


网络这里选择VirtIO半虚拟化,效率比较高;

确认无误后点击确定,接下来在虚拟机的硬件中添加PCI设备,添加我们要直通的显卡;

勾选主GPU和PCI-Express;

最后启动虚拟机,按照正常安装Windows的流程操作一遍

安装windows的kvm驱动,地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

所有驱动,包括显卡的驱动都装好之后,此时连接显示器应该是没有输出的,而且在设备管理器中,会提示该设备有问题,已被停止,所以接下来要解决这个问题。

将虚拟机关机,在硬件中删除刚刚直通的PCI设备,打开虚拟机的配置文件:

# 100换成具体的虚拟机ID

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

在第一行添加如下内容:

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

将显示改为无:


连接好显示器,重新打开虚拟机,不出意外你将看到熟悉的Windows10界面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容