使用环境说明
- 适用硬件:NUC6CAY | 运行系统:Proxmox Virtual Environment 6.3-1
- 参考借鉴:3455PVE方案分享 | NUC6核显直通HDMI输出 | PVE核显直通 | PVE搭建LibreELEC实现HDMI输出
开启IOMMU分组功能
1 | # 首先编辑GRUB配置文件中的GRUB_CMDLINE_LINUX_DEFAULT部分 |
添加VFIO驱动支持
1 | # 编辑如下文件添加后面内容 |
禁用设备驱动
1 | # 编辑如下文件添加后面内容,依实际配置选择禁用的驱动 |
检查直通结果
1 | # 先运行以下命令查看是否有输出,如无则IOMMU未开启成功 |
设置核显直通
1 | # 如果你不需要核显直通HDMI输出,那么直接在WEB界面添加PCI设备[0000:00:02.0]和[0000:00:0e.0]即可 |
无线网卡直通(可选)
- NUC6CAY默认无线和有线网卡在同一组内,直接直通无线网卡会导致有线网卡掉线
- PVE开启硬件PCIE直通需要开启IOMMU功能,默认Linux似乎是根据硬件所在的PCIE通道来分组的
- 内核源码中有个
acs_override
补丁可实现分组,但我们许多的硬件过不了补丁里的判断条件,所以导致IOMMU分组打了acs_override补丁也会失败- 那么我们只能把这个补丁里面的某个判断去掉来强制开启
acs_override
- 强制开启了
acs_override
后虽然IOMMU分组是完全打断了,但是如果某些功能确实硬件不支持,那么即使强制分了组使用起来也可能会有bug
- 强制开启
acs_override
补丁需要重新编译内核,下面提供一个网友修改编译后的内核
- 安装内核重启后即可发现IOMMU分组全都打断了,每一个硬件一个分组,只要不勾选全部功能即可分开直通
1 | # 安装新内核前记得卸载旧内核 |
其他问题
- 由于addr=0x02是虚拟机默认显卡地址,编辑虚拟机配置文件添加物理显卡后再为虚拟机添加虚拟显示会造成地址重复而报错,所以设置[vga: none]
kvm: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=j3455.bin: PCI: slot 2 function 0 not available for vfio-pci, in use by VGA TASK ERROR: start failed: QEMU exited with code 1
旧点的Win10系统如果安装2020年的新版驱动可能导致设备叹号,可安装的2019年版本的驱动
26.20.100.7212
试试PVE6.3去除订阅提醒
1 | sed -Ezi.bak "s/(Ext.Msg.show\(\{\s+title: gettext\('No valid sub)/void\(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js |
- 切换国内源和添加社区源
1 | rm /etc/apt/sources.list.d/pve-enterprise.list |
- VirtIO镜像中文件夹对应的驱动
1 | NetKVM/: Virtio 网络驱动 |