跳至正文
  • 30 views
  • 5 min read

【转载】PVE UEFI直通核显

新浪微博 豆瓣 QQ 百度贴吧 QQ空间

 原文链接:https://imacos.top/2023/10/26/rom/,转载请注明出处。

定制rom实现PVE环境UEFI模式直通核显并显示BIOS画面可以外接显示器输出画面(适用于Intel与AMD处理器)

前言

在前段时间,我分享了使用定制OVMF固件,实现PVE环境UEFI模式直通核显并显示BIOS画面,文章链接http://imacos.top/2023/10/09/152/ 。我个人感觉这种方式通用性还是比较高的,缺点就是会改动到PVE原本您的OVMF文件,同时使用了vbios_gvt_uefi.rom,此rom是多年前的通用版UEFI rom,对Intel 11代之后处理器兼容性不是很好可能会出现花屏等情况,那本期就介绍给大家另外的一种核显直通显示输出的方式,来规避这两个问题,原理就是用PVE自带OVMF,再加上通用IGD与GOP来实现。本文我还是以英特尔核显来介绍具体的操作步骤.

非常重要: 1.如果您之前定制过OVMF固件实现的直通,需要将定制的文件复原,否则可能会导致本次定制rom后直通不成功 2.如果你之前修改过PVE下的很多模块,也有可能会导致定制rom后直通不成功,这种情况建议重新安装PVE环境

本文的内容理论上适用于Intel 4-14代与amd的cpu核显(也许支持Intel14代更高版本) PVE版本为:Proxmox Virtual Environment 8.0.4 内核版本:Linux6.2.16-6-pve BIOS默认已经开了虚拟化vt-d, iommu相关直通设置,没开的自己进BIOS设置 本文内容的介绍是基于你已经安装了PVE并开启了iommu直通基础上介绍(下文也会附上开启iommu方式) 如果你还没有安装PVE,可以参考我前几期的教程附上链接: Proxmox(PVE)系统环境搭建安装教程:https://imacos.top/2023/07/18/pve/ PVE下如何启用 PCI直通显卡GPU/iGPU/USB/声卡AUDIO等硬件直通教程:https://imacos.top/2023/07/31/pci/ PVE下macOS苹果系统PCI直通AMD 580显卡硬件直通实例提取显卡rom教程:https://imacos.top/2023/08/01/580/

操作流程概览图:

img

工具

AFUWIN5.12
balenaEtcher
winpe.dmg
UBU 1.79.17
edk2-BaseTools-win32-master(PlatformGOPPolicy.efi、IgdAssignmentDxe.efi、通用igd.efi)
winscp/Transmit

cpu型号是否验证下载地址提取码备注
i3 8130U 百度网盘zw8x理论适用所有8代
i3 10105 百度网盘5fm4理论适用所有10代
i5 8265U百度网盘qka2理论适用所有8代
i7 9700百度网盘41fs理论适用所有9代
J4125百度网盘7t89
J6413百度网盘9w4r
AMD Ryzen™ 3 5400U百度网盘geyj理论适用AMD5000系列
i3_6100U百度网盘3tgs理论适用所有6代( i7-6700HQ测试可用)
n100百度网盘8hes来源于“蛋炒饭 i”投稿

文件解压密码:imacos.top

所有工具在本文下载地址中,如果你使用的cpu型号在以上列表,可以直接使用已经修改好的rom文件,如果你有修改好的rom文件,也欢迎您联系站长,发送到邮箱[email protected]中,站长将分享在本文中,提供给更多的人使用。上述的是否验证栏里有否的,如果你使用了,也欢迎在评论区留言是否使用成功,后续还会持续更新定制更多rom.

获取 BIOS 并提取 GOP

1.获取物理机BIOS(AMD的处理器也可以通过此方式提取)

如果你的电脑设备型号官网提供bios下载,请直接下载使用(无需提取设备的bios)

如果你的设备官网不提供bios下载(或者你找不到同设备的bios),那就使用AFUWIN5.12提取设备bios

建议使用AFUWIN5.12(win10完美运行)版本,下载后并在win10系统(已经测试在winpe也行)上提取bios,运行软件点下存储就可以。因为软件是win10或winpe环境才可以运行,所以你需要在设备上安装个win10或者用winpe系统环境下运行提取。不管是安装win10或者用winpe系统都比较简单,我这里就不介绍安装方式了。下载文件中包含了winpe的dmg文件,可以使用balenaEtcher写入到你的U盘中使用。(AFUWIN软件运行经过我测试,他不支持根目录文件夹名称有中文字符的情况运行,所以我们将文件夹重新命名为英文字符)

img

在win10上运行这个软件点“储存”就能获取物理机的bios文件

把存储的bios文件命名为bios.rom

2.从bios.rom中提取intel核显相关的IntelGopDriver.efi模块

把下载UBU 1.79.17工具解压,把存储的bios.rom拷贝进ubu软件目录下(直接网站下载的bios不需要命名拉进ubu目录)

img

接着运行UBU.bat(如果显示卡住不动的话多敲两次回车或者空格),打开你下载的BIOS文件。(如果UBU.bat程序cmd中没找到或者检测到bios,需要手动选择打开bios文件)



UBU会自动分析你的bios文件。

根据提示按2,再按S提取VBT和GOP。GOP如上文所说的,是用于UEFI固件点亮显示器的。VBT是用于传统BIOS模式的。这里不需要,只不过你如果需要将机型设置为q35,则可以使用VBT。

img
img

在ubu的Extracted目录下有个GOP文件夹,里面最终目录分别有IntelGopDriver.efi文件和vbt.bin文件。IntelGopDriver.efi文件就是我们需要的。

img

注:

  • intel提取出来的名称为:IntelGopDriver.efi
  • amd提取出来的名称为:AMDGopDriver.efi

合并efi并生成rom

将提取出来的IntelGopDriver.efi(amd提取出来的名称为:AMDGopDriver.efi)放入edk2-BaseTools-win32-master目录,同时这里还会用到核显的厂商与设备ID,ID可以通过在PVE Shell下执行 lspci -nn 命令,会列出有VGA的一行,最后的数字就是ID,如[8086:5917]。

Windows系统下打开cmd(或者powershell都行),cd进入到edk2-BaseTools-win32-master目录下运行下面命令,这个工具用于合并转换出1个rom

AMD核显合成方法:

.\EfiRom.exe -f 0xaaaa -i 0xbbbb -b .\vbios.bin -e .\AMDGopDriver.efi -o xxxx.rom
# 命令行中amd核显一定先是-b vbios.bin然后-e gop.efi这个顺序,-f和-i为核显的厂商编号aaaa、设备编号bbbb,比如 -f 0x1002 -i 0x164c,后面-o xxxx.rom是输出文件名。

intel 11-14代平台仅支持ovmf+i440fx机型合成方法:

.\EfiRom.exe -f 0xaaaa -i 0xbbbb -e .\IntelGopDriver.efi .\igd.efi -o xxxx.rom
# -f和-i为核显的厂商编号aaaa、设备编号bbbb,比如 -f 0x8086 -i 0x5917,后面-o xxxx.rom是输出文件名。

intel 4-10代平台核显直通(以下只支持ovmf+i440fx机型,q35机型使用提取的vbios文件),需要以下几个文件:IntelGopDriver.efi(amd的名称为:AMDGopDriver.efi)使用ubu工具从bios里提取出来,IgdAssignmentDxe.efi,PlatformGOPPolicy.efi,合成方法:

.\EfiRom.exe -f 0xaaaa -i 0xbbbb -e .\IntelGopDriver.efi .\IgdAssignmentDxe.efi .\PlatformGOPPolicy.efi -o xxxx.rom
# -f和-i为核显的厂商编号aaaa、设备编号bbbb,比如 -f 0x8086 -i 0x3e98,后面-o xxxx.rom是输出文件名。

合并多个efi,达到一个rom通用多设备,以11代以上的为例(IntelGopDriver.efi文件名可自定义)

.\EfiRom.exe -f 0x8086 -i 0xffff -e .\IntelGopDriver11900.efi .\IntelGopDriver12600t.efi .\IntelGopDriver14900k.efi .\igd.efi -o xxxx.rom

通用igd.efi来源附上github项目地址https://github.com/gangqizai/igd

拓展一下EfiRom程序参数命令的其他含义

Options:
-o FileName, --output FileName 最后输出文件名字,不指定也是输出 xxx.rom
File will be created to store the output content.
-e EfiFileName 使用什么efi文件,可以多个
EFI PE32 image files.
-ec EfiFileName 使用什么efi文件,可以多个,并压缩
EFI PE32 image files and will be compressed.
-b BinFileName 使用什么传统rom bin文件,可以多个
Legacy binary files.
-l ClassCode
Hex ClassCode in the PCI data structure header.
-r Rev Hex Revision in the PCI data structure header.
-n Not to automatically set the LAST bit in the last file.
-f VendorId 厂商代码,比如intel为0x8086
Hex PCI Vendor ID for the device OpROM, must be specified
-i DeviceId 设备代码
One or more hex PCI Device IDs for the device OpROM, must be specified
-p, --pci23
Default layout meets PCI 3.0 specifications
specifying this flag will for a PCI 2.3 layout.
-d, --dump
Dump the headers of an existing option ROM image.
-v, --verbose
Turn on verbose output with informational messages.
--version Show program's version number and exit.
-h, --help
Show this help message and exit.
-q, --quiet
Disable all messages except FATAL ERRORS.
--debug [#,0-9]
Enable debug messages at level #.

将获取到的显卡rom上传到PVE的指定目录中(PVE开机状态),上传路径:/usr/share/kvm

win下推荐上传工具:WinSCP下载地址https://winscp.net/eng/index.php

Mac下我使用的上传工具是Transmit.app,本站下载地址:https://imacos.top/2024/01/15/transmit-5-for-mac-v5-9-2/

PVE开启iommu直通

1.打开PVE节点的shell,输入命令: 要忽略 dmesg 输出中的一些烦人的错误, 请运行以下命令(# 这一步对于直通来说不是必需的,但有助于保持干净。)

nano /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=Y report_ignored_msrs=0
# 按 Ctrl + X,然后按 Y + Enter 保存更改。

2.启动内核IOMMU支持 IOMMU(Input-Output Memory Management Unit)是一种硬件功能,用于管理设备对系统内存的访问。启用 IOMMU 后,可以在虚拟机中直接访问物理设备,并允许虚拟机独立于主机操作系统运行** **

nano /etc/default/grub # 将以下行粘贴到其中,并在旧标签前面添加一个注释标签#,以下为常用的一些写法。
# 对于 Intel CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"
# 对于 AMD CPU
GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf"
# 其他的一些写法(如果是AMD处理器,将intel改为amd)
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_gvt=1 video=efifb:off" # 这是GVT模式,也就是共享模式,少部分cpu支持,但体验很好
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off" # 这是独占模式,都支持,但显示器没有pve的控制台输出,也只能直通个一个虚拟机
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" #本期教程我使用的就是这个
# 参数释义
1.iommu=pt:启用 Intel VT-d 或 AMD-Vi 的 IOMMU。这是一种硬件功能,用于管理设备对系统内存的访问。在虚拟化环境中,启用 IOMMU 后,可以将物理设备直通到虚拟机中,以便虚拟机可以直接访问硬件设备。“iommu=pt”不是必须的,PT模式只在必要的时候开启设备的IOMMU转换,可以提高未直通设备PCIe的性能,建议添加。
2.initcall_blacklist=sysfb_init:禁用 sysfb_init 内核初始化函数。这个函数通常用于在内核启动过程中初始化系统帧缓冲。在使用 GPU 直通的情况下,这个函数可能会干扰直通操作,因此需要禁用它。
3.i915.enable_gvt=1:启用 Intel GVT-g 虚拟 GPU 技术。这个选项用于创建一个虚拟的 Intel GPU 设备,以便多个虚拟机可以共享物理 GPU 设备。启用 GVT-g 需要在支持虚拟 GPU 的 Intel CPU 和主板上运行,并且需要正确配置内核和虚拟机。想开启GVT-g的就添加这条,显卡直通的就不要添加了。
4.initcall_blacklist=sysfb_init:屏蔽掉pve7.2以上的一个bug,方便启动时候就屏蔽核显等设备驱动;
5.pcie_acs_override=downstream,multifunction:便于iommu每个设备单独分组,以免直通导致物理机卡死等问题
6.pci=nommconf:意思是禁用pci配置空间的内存映射,所有的 PCI 设备都有一个描述该设备的区域(您可以看到lspci -vv),访问该区域的最初方法是通过 I/O 端口,而 PCIe 允许将此空间映射到内存以便更简单地访问。

3.使用以下命令更新 grub

update-grub

更新后可以重启电脑

4.主机重新启动并运行后,运行以下命令,验证是否开启iommu

dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
# 如果没有输出,则说明有问题。你应该看到这样的东西;“DMAR: IOMMU enabled”
# 另外一种验证方式
dmesg | grep iommu
# 出现如下例子。则代表成功
[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
# 此时输入命令
find /sys/kernel/iommu_groups/ -type l
# 出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启

5.对于某些平台,可能需要允许不安全中断。运行以下命令

nano /etc/modprobe.d/iommu_unsafe_interrupts.conf # 添加以下行;请注意,此选项可能会使您的系统不稳定。
options vfio_iommu_type1 allow_unsafe_interrupts=1

6.启用必要的内核模块,运行以下命令

nano /etc/modules # 添加以下行;
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

7.将驱动程序模块列入黑名单,以使虚拟机能够完全访问显卡等。运行以下命令

nano /etc/modprobe.d/pve-blacklist.conf # 添加以下行;
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist radeon
blacklist amdgpu
blacklist i915
options vfio_iommu_type1 allow_unsafe_interrupts=1
# 如果有重复项,记得删除,解释:屏蔽三大显卡驱动,屏蔽hdmi声音驱动;options

8.通过设备ID绑定vfio-pci

#执行 lspci -nn 命令,您应该看到如下内容,找到有vga标识的一行,记录核显VendorID 和 DeviceID,这里的两个ID后续定制rom也会用到
“0x:00.x VGA compatible controller … [1234:5678]”
“0x.00.x Audio Device … [1234:5678]” # 无需记下 GPU 音频 ID。
“0x.00.x USB controller … [1234:5678]”
nano /etc/modprobe.d/vifo.conf # 添加以下行; options vfio-pci ids=8086:5917

9.更新模块并重新启动主机以应用更改

update-initramfs -u -k all
reboot

10.注意:

我这里分享一下我在直通的时候遇到的一个问题,大家一定要注意,我们在没有做PVE直通的操作前,PVE画面的输出是会显示像这张图片上的样式

img

有PVE登录的IP地址,一旦你做了PVE直通的操作后,重启PVE,如果直通操作成功的话,是一定不会看到PVE登录的IP地址,我这里,操作直通成功重启后的画面是如下图这样的

也许你的直通操作成功后,画面样式与我的会有一定的区别,但是请记住,如果你操作直通后通过上述介绍的,在PVE的Shell节点下验证成功了,但是PVE开机画面还是会显示登录的IP地址,这种情况一定是直通的启动内核IOMMU支持代码不对,换一种写法继续尝试,直到PVE重启看不到登录的IP地址才算成功。

虚拟机创建注意事项

1.【重要】准备事项提醒

正如前言说的一样,本文是基于你已经安装了PVE基础上介绍 如果你还没有安装PVE,可以参考我前几期的教程附上链接: Proxmox(PVE)系统环境搭建安装教程:https://imacos.top/2023/07/18/pve/ PVE下如何启用 PCI直通显卡GPU/iGPU/USB/声卡AUDIO等硬件直通教程:https://imacos.top/2023/07/31/pci/

2.关于虚拟机创建配置

直通Intel核显 所选的虚拟机类型必须为i440fx 7.2版本或者最新以上机型(不能选q35!) 系统类型可选择为推荐使用Linux,Windows或其他类型可能会导致安装核显驱动后,出现43错误,驱动不成功。 固件类型选择ovmf UEFI TPM选择开启,安全启动随意 CPU类型选HOST,否则可能会出现装不上驱动 光驱选择ide,硬盘选择sata硬盘或者也可以scsi(选择ide和sata是为了核显直通打游戏需要,你也可以坚持选其他),其他保持默认设置 创建后进入Options,打开QEMUGuestAgent和UseLocalTimeforUTC以获得更好体验

3.直通虚拟机环境设置

虚拟机创建后先不要启动,为创建的虚拟机添加核显pcie,将显示设置为无 none。并同时添加负责声音的pcie设备。在PVE的SHell节点下执行命令

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

100是你创建直通核显虚拟机的ID

进入后在配置文件中增加一行,这行用于设置核显额外参数,包括把设备地址设置为02.0,设置x-igd-gms大小并启用x-igd-opregion。

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

同时修改hostpci0开头的这一行,这行用于添加核显,开启 legacy-igd 模式,加载 romfile。

hostpci0: 0000:00:02,legacy-igd=1,romfile=xxxx.rom

然后,一定记得把虚拟机的 显卡改为 None,避免虚拟显卡和直通的核显争抢总线地址。

这里上一下我完整的虚拟机配置,可以参考一下

agent: 1
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
boot: order=virtio0;ide2;net0
cores: 4
cpu: host
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,size=4M
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=i3_10105_igd_efi.rom
hostpci1: 0000:00:1f.3
ide2: none,media=cdrom
memory: 4096
meta: creation-qemu=8.0.2,ctime=1698238750
name: i44fx
net0: virtio=BA:A1:1D:08:A9:5B,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
scsihw: virtio-scsi-single
smbios1: uuid=b3176867-4e41-4637-b3c1-a68810d70644
sockets: 1
tpmstate0: local-lvm:vm-100-disk-1,size=4M,version=v2.0
vga: none
virtio0: local-lvm:vm-100-disk-2,cache=writeback,discard=on,iothread=1,size=32G
vmgenid: fb5d54dc-02a5-44c2-8a04-2649d69249b2

启动虚拟机后,正常就可以看到PVE BIOS的开机画面,此时你可直通USB键盘,并按ESC进入UEFI设置,所有直通的操作就完成了。

结束语

正常情况操作完后,不管后续要安装Liunx、win、mac或其他系统,直通出画面就都没有问题了,只不过安装不同的操纵系统,在配置上会有一定的变动。

关于win系统安装,我自己测试的安装成功后,直接安装显卡驱动,没有什么问题,显卡工作正常。win系统安装请看我之前发布的教程(http://imacos.top/2023/09/07/pve-windows-11/

关于黑苹果系统的安装,前期给大家介绍PVE安装macOS系统(http://imacos.top/2023/07/29/pve-macos/),机型选择的是q35,但是本文介绍的核显直通必须选择i440fx,经过站长的测试,选择i440fx也一样可以安装macOS系统,大致思路就是将dmg带OC引导的镜像写入U盘中,直接直通U盘后使用U盘安装,这种方式与安装黑苹果的方式完全一致。具体详细的教程,预计后续会出一期,专门来讲这个点。或者直接使用本站点已经安装好的的macOS备份恢复版本http://imacos.top/category/pve/pvemac/需要注意的是,i440fx 机行需要修改配置文件的args:这一行,我列出来,大家可以参考

args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on -device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" -smbios type=2 -global nec-usb-xhci.msi=off -global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off -cpu host,vendor=GenuineIntel,+invtsc,+hypervisor,kvm=on,vmware-cpuid-freq=on

附:PVE使用常见问题及使用合集链接

PVE OC Mac系统:http://imacos.top/category/pve/pvemac/ Proxmox(PVE)系统环境搭建安装教程http://imacos.top/2023/07/18/pve/ 定制OVMF固件实现PVE环境UEFI模式直通Intel核显并显示BIOS画面可以外接显示http://imacos.top/2023/10/09/152/ PVE(Proxmox VE) 启动各种报错问题合集篇(持续更新)http://imacos.top/2023/09/17/89/ PVE(Proxmox VE) 使用常见问题及笔记合集篇(持续更新)http://imacos.top/2023/09/17/2-2/ PVE(Proxmox)安装macOS苹果系统遇到的一些错误经验分享(持续更新)http://imacos.top/2023/08/27/macos/ PVE(Proxmox VE)安装Windows 11虚拟机直通独立显卡http://imacos.top/2023/09/07/pve-windows-11/ PVE下macOS苹果系统PCI直通AMD 580显卡硬件直通实例提取显卡rom教程http://imacos.top/2023/08/01/580/ PVE下如何启用 PCI直通显卡GPU/iGPU/USB/声卡AUDIO等硬件直通教程http://imacos.top/2023/07/31/pci/ PVE环境安装macOS苹果系统http://imacos.top/2023/07/29/pve-macos/

文件解压密码:imacos.top

百度网盘立即下载提取码: dd3f复制

天翼云盘立即下载提取码: agv4复制

夸克网盘立即下载提取码: eAue复制

发表回复

联系站长