在网上买了一个小主机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界面。