Proxmox Virtual Environment 7.1-7  J4125  UHD600

使用  PVE 7.1-7 最新版本目前全网没有任何资料,折腾了三个晚上终于成了,现在写个教程

开启直通

首先有一个特别重要的事情,需要在bios里开启vt-d,csm,并且video必须是legacy,否则直通显卡后虚拟机直接无法启动,至于pve用什么方式启动这个无所谓

nano /etc/default/grub

把 GRUB_CMDLINE_LINUX_DEFAULT 那行改成这样
这是GVT模式,也就是共享模式,少部分cpu支持,但体验很好

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off"

这是独占模式,都支持,但显示器没有pve的控制台输出,也只能直通个一个虚拟机

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off"
nano /etc/modules

把这些填进去

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvmgt

允许不安全中断

nano /etc/modprobe.d/iommu_unsafe_interrupts.conf

把这行填进去

options vfio_iommu_type1 allow_unsafe_interrupts=1

避免死机

nano /etc/modprobe.d/kvm.conf

把这行填进去

options kvm ignore_msrs=1

更新引导和内核,然后重启pve

update-initramfs -u
update-grub

查看核显pcie设备id,记下来,待会用到

lspci -nn

从这里可以看出,核显位置是在00:02.0,并且id是8086:3185,下面的声卡同理

00:02.0 VGA compatible controller [0300]: Intel Corporation GeminiLake [UHD Graphics 600] [8086:3185] (rev 06)
00:0e.0 Audio device [0403]: Intel Corporation Celeron/Pentium Silver Processor High Definition Audio [8086:3198] (rev 06

上面改了GVT模式的,先看看核显支不支持GVT,这个文件夹下面有i915-GVT之类就是支持,可以同时直通给多个虚拟机同时用,并且直接在图形界面选了就行,后面不用看了
不支持的话,看上面重改/etc/default/grub换成独占模式,重启,然后继续后面的步骤

ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types

添加到vfio的配置中,如果hdmi无法显示,那请去掉这条配置

nano /etc/modprobe.d/vfio.conf

举个例子,两组id自己改成自己的

options vfio-pci ids=8086:3185,8086:3198

屏蔽驱动

nano /etc/modprobe.d/blacklist.conf

把这些填进去

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

提取 vbios.bin

如果您也是J4125,那么你可以直接用这个改好的 j4125.zip,解压了把它放到/usr/share/kvm中,然后配置虚拟机

另外群友 心- 提供了另一个,如果你的4125怎么都不亮,可以试试这个vbios vbios_j4125.bin.zip

必须开csm并且设置成传统的video才能读出来,没有vbios大概也能用,懒的话可以先试试插HDMI能不能亮

进去核显的位置并且提取vbios,举个例子,位置换成你自己的

cd /sys/bus/pci/devices/0000:02:00.0

echo 1 > rom
cat rom > /usr/share/kvm/vbios.bin
echo 0 > rom

安装工具

apt install gcc make git
cd ~
git clone https://github.com/awilliam/rom-parser
cd rom-parser
make

修复id不对的问题,举个例子,按提示改成你自己的id

./rom-fixer /usr/share/kvm/vbios.bin
Valid ROM signature found @0h, PCIR offset 40h
PCIR: type 0 (x86 PC-AT), vendor: 8086, device: 15f3, class: 020000
PCIR: revision 3, vendor revision: 201
Modify vendor ID 8086? (y/n): n
Modify device ID 15f3? (y/n): y
New device ID: 3185
Overwrite device ID with 3185? (y/n): y
Valid ROM signature found @f000h, PCIR offset 1ch
PCIR: type 3 (EFI), vendor: 8086, device: 15f3, class: 000000
PCIR: revision 3, vendor revision: 902
EFI: Signature Valid, Subsystem: Boot, Machine: X64
Modify vendor ID 8086? (y/n): n
Modify device ID 15f3? (y/n): y
New device ID: 3185
Overwrite device ID with 3185? (y/n): y
Last image
ROM checksum is invalid, fix? (y/n): y

配置虚拟机

我这里是一个win10 ltsc的虚拟机,虚拟机id是100,请注意下面的命令里的虚拟机id改成你自己的
在图形界面上虚拟机硬件添加pci设备,只需要勾选PCI-Express
回到命令行,改虚拟机配置文件

nano /etc/pve/qemu-server/100.conf

在显卡那条hostpci的最后加上,romfile=vbios.bin

hostpci0: 0000:00:02.0,pcie=1,romfile=vbios.bin

如果上面的方法不行,那就删掉hostpci0那行,在文件最上面加上这行,并且把 显示 设置成 无,不加romfile大概也能用,可以先试试

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=vbios.bin

然后开虚拟机装驱动就完事了,虚拟机必须是SeaBIOS的传统启动,此处显卡驱动必须得是26.20.100.7262版本的,不然就会黄三角,已经往咩咩乐园群共享传了一份,可以去下载在设备管理器手动装
测试过好了之后,去编辑把主gpu勾上,这样虚拟机的bios都会显示在显示器上了

其他

  1. n5105实测没法直通,通进去了也是没有任何硬件加速的,intel在驱动里下毒了
  2. 虚拟机里声卡明明有设备有驱动用不了,其实不是声卡驱动问题,而是要关机物理机再开机,第一次开直通的虚拟机的时候声卡就是可以用的,但是虚拟机再次开机声卡就用不了了,又是intel搞的鬼
  3. 顺便扯一下,在bios的 Device... -> OVMF... 中可以修改虚拟显示器的分辨率,或者使用spice都可以修改默认的800x600