Intel NUC8i7BEH 实现核显直通

宿主机环境

虚拟化环境:Proxmox 7.0
硬件:Intel NUC NUC8i7BEH
BIOS:UEFI Mode

配置PVE

开启 IOMMU

修改 /etc/default/grub 文件
找到 GRUB_CMDLINE_LINUX_DEFAULT 一行,替换为
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off,vesafb:off"
保存后执行 update-grub 更新grub

加载 VFIO 模块

修改 /etc/modules 文件,添加以下内容

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

添加驱动黑名单

修改 /etc/modprobe.d/pve-blacklist.conf 添加以下内容:

1
2
3
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

绑定显卡到 VFIO

执行 lspci -n | grep -E "0300" 查看并记录核显 VendorID 和 DeviceID

1
00:02.0 0300: 8086:3ea5 (rev 01)

修改 /etc/modprobe.d/vfio.conf 添加如下内容
options vfio-pci ids=8086:3ea5

验证

重启,若启动界面卡在 Loading initial ramdisk ... 表示核显已被屏蔽
执行 lsmod | grep vfio 得到类似输出,表示已加载成功

1
2
3
4
5
vfio_pci               57344  2
vfio_virqfd 16384 1 vfio_pci
irqbypass 16384 14 vfio_pci,kvm
vfio_iommu_type1 36864 1
vfio 36864 7 vfio_iommu_type1,vfio_pci

提取核显ROM

TLDR: 已提取好的ROM文件

参照 https://github.com/tmbeck/nuc-passthrough 提取核显ROM,放置到/usr/share/kvm ,下文假设文件路径为 /usr/share/kvm/intel-iris-655.rom

配置虚拟机参数

  • Machine 必须设置为默认的 i440fx ,否则启动会提示 legacy IGD assignment is not compatible with q35
  • Display 必须设置为 none ,否则启动会提示 legacy IGD assignment requires VGA mode to be 'none'
  • 添加显卡 PCI 设备,NUC 对应 ID 0000:00:02.0

手工修改虚拟机配置

修改/etc/pve/qemu-server/<vmid>.conf 文件, <vmid> 对于虚拟机ID,找到添加的显卡设备一行,追加 ,legacy-igd=1,romfile=intel-iris-655.rom ,启用 IDG Passthrough和加载ROM
hostpci0: 0000:00:02.0
修改为 hostpci0: 0000:00:02.0,legacy-igd=1,romfile=intel-iris-655.rom

尝试启动虚拟机

提前确认好远程桌面服务启动正常,否则由于noVNC被禁用,无法控制操作系统。
进入设备管理器,检查显示驱动是否正常工作,没有感叹号提示。
此外可以选择直通USB控制器 0000:00:14.0,获得更好的使用体验。

Reference

https://pve.proxmox.com/wiki/Pci_passthrough
https://github.com/tmbeck/nuc-passthrough
https://blog.timzhong.top/2020/09/27/pve-direct-pcie/
https://www.10bests.com/win10-htpc-on-pve/