J4105/J4125 PVE Hdmi直通核显

硬件准备

主机型号

  • 支持 J4105、J4125,核显型号为 UHD600
  • hdmi、vga(未尝试、一般可行)
  • 需支持 vt-d
  • gk55、j4105 工控机测试可用

软件准备

软件版本

  • pve 6.3-6 版本(截止 21-04-14 最新版本),其他版本未测试,原理相同,可自行尝试
  • windows ltsc 最新即可
  • intel 核显驱动需要26.20.100.7262,需特别注意此版本,高于这个版本会报 Code 43 错误

安装 pve

过程略、普通安装即可

配置 pve

配置直通

编辑 GRUB 配置文件

1
nano /etc/default/grub

开启 IOMMU 支持

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

如果是 AMD 的 CPU

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on video=efifb:off"

更新 GRUB:

1
update-grub

添加所需的系统模块(驱动)

1
2
3
4
echo "vfio" >> /etc/modules
echo "vfio_iommu_type1" >> /etc/modules
echo "vfio_pci" >> /etc/modules
echo "vfio_virqfd" >> /etc/modules

接着添加模块(驱动)黑名单,即让 GPU 设备在下次系统启动之后不使用这些驱动,把设备腾出来给 vfio 驱动用:
Intel 核显:

1
2
3
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf

绑定核显到 vfio 模块
查看核显以及声卡的供应商和设备 ID:

1
lspci -n | grep -E "0300|0403"

回显如下:

1
2
00:02.0 0300: 8086:3185 (rev 03)
00:0e.0 0403: 8086:3198 (rev 03)

其中“8086:3185”和“8086:3198”分别就是核显和声卡的供应商 ID 和设备 ID,把它们绑定到 vifo 模块:

1
echo "options vfio-pci ids=8086:3185,8086:3198" > /etc/modprobe.d/vfio.conf

更新内核:

1
update-initramfs -u

重启机器:

1
reboot

重启上来之后检查模块是否正常加载:

1
lsmod | grep vfio

有类似回显说明正常:

1
2
3
4
5
vfio_pci               45056  1
vfio_virqfd 16384 1 vfio_pci
irqbypass 16384 13 vfio_pci,kvm
vfio_iommu_type1 24576 1
vfio 28672 5 vfio_iommu_type1,vfio_pci

配置虚拟机

  • 创建虚拟机,安装成功之前不要选择开机自启动,防止直通冲突,和 pve 抢占硬件
  • image.png
  • 系统选择时,保持默认
  • 硬盘随意
  • cpu 类别选择 host

安装 windows

  • 初次安装不要直接直通,先安装好系统后关机再直通
  • 安装完成后不要连接 hdmi 接口

配置 pve 直通核显

  • pve 虚拟机硬件设置
  • image.png
  • 由于我这边不显示设备名称,所以需要安装上方 lspci 显示的设备 ID 添加
  • 00:02.0 是核显,00:0e.0 是声卡,均需直通给虚拟机
  • image.png

安装驱动

驱动 43 解决

获取 RomFile

修改参数

1
hostpci0: 00:02.0,legacy-igd=1,romfile=HD600.bin

禁用驱动更新

  • Win+R 打开 gpedit.msc
  • 计算机配置 - 管理模板 - Windows 组件 - Windows 更新 - Windows 更新不包括驱动程序 - 启用

安装驱动后配置虚拟机

修改配置文件

1
nano /etc/pve/qemu-server/虚拟机id.conf

添加参数

1
2
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1  -set device.hostpci0.x-igd-opregion=on
vga: none

args 中 hostpci0 参数需要存在

1
hostpci0: 00:02.0

保存启动,连接 hdmi 接口
完成

优化设置

启用 QEMU Guest Agent

参考连接:
https://www.10bests.com/win10-htpc-on-pve/
https://lala.im/6324.html
https://github.com/my33love/gk41-pve-ovmf
https://blog.csdn.net/m0_46642572/article/details/105092905