在 Proxmox VE (PVE) 8.1 环境下,将 Intel N100 (Alder Lake-N) 的核显通过 SR-IOV 虚拟化出多个 VF (Virtual Function) 并直通给 Windows 11 虚拟机时,很多人会遇到两个核心痛点:物理副屏(HDMI/DP)没有信号输出,以及 Windows 设备管理器中显卡驱动报代码 43 (Code 43) 错误。
要彻底解决这两个问题,我们需要从 Intel 的硬件架构设计和 QEMU/KVM 的虚拟化配置入手。
痛点一:为什么物理副屏接口(HDMI/DP)没有信号?
这是由 Intel 硬件架构的物理限制决定的,而非配置错误。
底层逻辑
Intel Gen12 (Alder Lake-N) 的 GPU 架构中,显示引擎 (Display Engine/Display Block) 是物理且单一的。
- 物理功能 (PF, Physical Function):即宿主机看到的
00:00:02.0。它拥有对物理显示输出接口(HDMI、DP)以及显示引擎的绝对控制权。 - 虚拟功能 (VF, Virtual Function):即虚拟化出来的
00:00:02.1等子卡。VF 仅包含 3D 渲染引擎和媒体编解码引擎(Render & Media Engine),不包含任何显示引擎。
结论
通过 SR-IOV 分配给 Windows 虚拟机的 VF,在物理上无法直接输出信号到主板上的 HDMI 或 DP 接口。
如果你必须要物理显示器输出信号,只有两种选择:
- 放弃 SR-IOV:将整个核显 PF(
00:02.0)直接完全直通给 Win11 虚拟机(此时 PVE 宿主机和其他虚拟机将无法使用该核显)。 - 使用虚拟显示器 + 串流(推荐):继续使用 SR-IOV,但在 Win11 内安装虚拟显示器驱动,通过远程桌面、Sunshine/Moonlight 或 Parsec 实行高帧率、低延迟的画面回传。
痛点二:如何解决 Windows 11 驱动代码 43 错误?
Windows 11 虚拟机中出现“代码 43”报错,代表显卡驱动初始化失败。在 SR-IOV 场景下,这通常是因为 PVE 宿主机内核参数未正确配置、VM 虚拟机硬件设置不规范、或者虚拟机没有屏蔽虚拟化检测。
请按照以下完整步骤进行排查和修复。
步骤一:修正 PVE 宿主机内核及 i915 驱动参数
确保你使用的是社区主流的 strongtz/i915-sriov-dkms 驱动。
编辑 grub 配置文件:
nano /etc/default/grub确保内核参数包含
intel_iommu=on和iommu=pt:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"更新 grub:
update-grub检查
i915模块配置。编辑或创建/etc/modprobe.d/i915.conf:nano /etc/modprobe.d/i915.conf确保写入以下参数(开启 GuC 并分配正确的 VF 数量):
options i915 enable_guc=3 max_vfs=7注意:N100 建议最多分配 7 个 VF。
重启 PVE 宿主机以确保配置生效。
步骤二:规范 Windows 11 虚拟机配置
Win11 虚拟机的配置文件必须极其严格,否则会导致 Intel 驱动触发保护机制报错。
登录 PVE 命令行,编辑该 Win11 虚拟机的配置文件(假设 VM ID 为
101):nano /etc/pve/qemu-server/101.conf调整以下核心参数:
- Machine 类型:必须是
q35。 - BIOS:必须是
OVMF (UEFI)。 - CPU 设置:建议设置为
host,并屏蔽虚拟化特征(防止驱动检测到是在虚拟机内运行)。 - PCI 设备配置:确保直通的 VF 启用了
pcie=1。
参考配置模板:
bios: ovmf cores: 4 cpu: host,hidden=1,flags=+amd-no-ssb;+amd-ssbd;+virt-ssbd efidisk0: local-lvm:vm-101-disk-0,efitype=mkdir,size=4M machine: q35 # 注意此处不要勾选 x-vga=1,因为 VF 没有显示输出能力,勾选会导致冲突报错 hostpci0: 0000:00:02.1,pcie=1 # 注入屏蔽虚拟化的 QEMU 参数 args: -cpu 'host,-hypervisor,kvm=off,hv_vendor_id=null'- Machine 类型:必须是
保存并退出。
步骤三:在 Windows 11 中彻底清理并重装驱动
Windows 11 自动更新下载的 Intel 驱动版本往往会与宿主机 i915-sriov-dkms 的固件版本冲突,引发代码 43。
卸载旧驱动:
- 在 Win11 虚拟机内下载 DDU (Display Driver Uninstaller)。
- 进入 Win11 安全模式,运行 DDU 彻底清除所有已存在的 Intel 显卡驱动,并阻止 Windows Update 自动下载显卡驱动。
安装兼容的驱动版本:
- 重启进入正常系统。
- 推荐安装 Intel 官方特定版本驱动。对于 Alder Lake-N 系列,目前测试稳定性最佳的驱动版本为
31.0.101.4091或31.0.101.4644。避免直接安装最新测试版(Beta)驱动。 - 安装完成后重启虚拟机。
终极形态:无物理信号下的加速与输出方案
当代码 43 解决后,你会发现设备管理器中 Intel(R) UHD Graphics 显示正常,但由于没有物理显示器,你无法在 Windows 内设置高分辨率和高帧率。
此时,我们需要在虚拟机内部署虚拟显示器驱动 (Virtual Display Driver):
安装 IddSampleDriver:
- 访问 GitHub 搜索并下载
ge9/IddSampleDriver或usbmmidd。 - 这是一个软件级模拟的物理显示器驱动。安装后,Windows 会认为插入了一台支持 4K 120Hz/144Hz 的高级显示器。
- 在 Windows 屏幕设置中,将此虚拟显示器设为主屏幕。
- 访问 GitHub 搜索并下载
配合串流工具使用:
- 在 Win11 中部署 Sunshine(开源的主机端流媒体服务器)。
- 客户端使用 Moonlight。
- 此时,N100 VF 将提供完整的 3D 渲染和高效率的 H.264/HEVC/AV1 硬件编码加速。你可以在任何其他设备上,以极低的延迟和满帧率畅玩或办公。
通过上述方法,你既规避了物理硬件的设计缺失,又完美压榨出了 N100 核显在虚拟化环境下的全部算力。