康耐信(CncTion)论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1266|回复: 2

N100-4网卡软路由,IOMMU? VFIO? GPO? Proxmox PVE PCIE直通和核顯HDMI...

[复制链接]

76

主题

212

帖子

1743

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1743
发表于 2023-10-24 11:41:56 | 显示全部楼层 |阅读模式
PVE教學經常會看到起手式設置PCIE直通和IOMMU分組之類的環境參數,正好小U要嘗試核顯+HDMI直通,本文就梳理一下相關的參數設置是什麼意思。
摘要節點






GRUB和intel_iommu
最常見PVE直通教程第一樣修改的如下:
nano /etc/default/grub找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream"update-grub
GRUB是什麼?GRUB 是一個引導加載器,當電腦開機時,它會先被載入,然後 GRUB 將負責加載操作系統。

  • intel_iommu=on: 這會啟用 Intel 的 IOMMU。IOMMU 是輸入/輸出內存管理單元,主要用於虛擬化情境,允許主機和虛擬機共享硬件資源。
  • pcie_acs_override=downstream: 這用於 PCIe ACS(存取控制服務)的覆蓋。這個參數可能在多個虛擬機使用同一PCIe設備時有所幫助,通常是在硬件層面上對虛擬機進行隔離。
modules和vifo
編輯 nano /etc/modules
#增加以下modulevfiovfio_iommu_type1vfio_pcivfio_virqfd#保存後 update-initramfs -u -k all
MODULES是什麼?/etc/modules 是 Linux 系統中的一個配置文件,它用於列出在啟動時應該自動載入的核心模組。這些模組通常是設備驅動或其他特殊功能的驅動,它們不是核心的固定部分,但可能是系統正常運行所需的。
當系統啟動時,init 進程或相關的啟動服務會讀取 /etc/modules 文件,並使用 modprobe 命令來載入其中列出的每一個模組。
例如,如果你有一個特定的硬體設備,如某種無線網卡,它需要一個特定的驅動來運行,但這個驅動不是預設載入的。在這種情況下,你可以將該驅動的模組名稱添加到 /etc/modules 文件中,確保每次系統啟動時它都會被載入。

  • vfio: 這是 VFIO (Virtual Function I/O) 的主模組。VFIO 是一種提供安全和模塊化的方法來訪問硬件的框架,通常用於虛擬化。
  • vfio_iommu_type1: 這是 VFIO 的 IOMMU 驅動,它支持 Type 1(I/O Virtualization)。
  • vfio_pci: 這個模組是用於 PCI/PCIe 設備的 VFIO 驅動。
  • vfio_virqfd: 這是一個支持 VFIO 虛擬中斷的模組。
將這些模組添加到 /etc/modules 會確保在系統啟動時它們被載入,這通常在設置硬件虛擬化或特定的硬件直通(如 GPU 直通到虛擬機)時是必要的。
直通顯卡以及HDMI

[size=1em]把显卡驱动加入黑名单

echo "blacklist i915" >> /etc/modprobe.d/pve-blacklist.conf

[size=1em]通过设备ID绑定vfio-pci 执行 lspci -n | grep -E “0300” 查看并记录核显 VendorID 和 DeviceID

echo "options vfio-pci ids=8086:a780" >> /etc/modprobe.d/vifo.confupdate-initramfs -urebootvifo.conf 没有 disable_vga=1,有的删掉!
initcall_blacklist=sysfb_init
而pve_blacklist中除了i915之外,還有snd_hda_intel (但是沒有snd_hda_codec_hdmi),以及允許設備不安全中斷的定義。總結如下:

[size=1em]echo “blacklist snd_hda_intel” >> /etc/modprobe.d/pve-blacklist.conf
echo “blacklist i915” >> /etc/modprobe.d/pve-blacklist.conf
echo “options vfio_iommu_type1 allow_unsafe_interrupts=1” >> /etc/modprobe.d/pve-blacklist.conf

PCIE ID查看和綁定的命令也有不同,YouTube用的是
lspci -D -nn | grep VGAlspci -D -nn | grep AudioDriver的加載
gangqizai/igd 給出的兩個通用BIOS,只需要在虛擬機的conf 文件加入
因为使用两个rom文件,conf配置文件中,一个rom文件加在显卡,另一个加在声卡,大家注意一下。
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.rom
hostpci1: 0000:00:1f.3,romfile=gen12_gop.rom
就能啓動。
但是愛折騰老高的YouTube的步驟要複雜很多,主要因爲是老高的N5105無法使用 gangqizai/igd 中gen12_gop.rom 這個ROM,所以要人手提取並轉化這個gop rom:




簡單比較一下 GOP 與VBIOS :
  • GOP:沒有 64 KB 的檔案大小限制,需要在32 位元保護模式下執行,UEFI不需要搭配CSM,可以快速開機。
  • VBIOS/IGD:有 64 KB 與127 KB的檔案大小限制,且必須要在16 位元執行環境。UEFI 需要搭配 CSM(也就是所謂的Legacy mode), 開機速度比GOP慢。
我的理解 gangqizai/igd 的gen12_igd.rom等於Legacy mode 的 VBIOS (Bios工程师手边事—IGD VBIOS_intel bmp工具-CSDN博客),而gen12_gop.rom 愛折騰老高的YouTube 要自行提取。提取的思路如下:
廠家BIOS –> 用 “UEFI BIOS Updater” (UBU) 來提取顯卡的Video Onboard 的efi –> 用edk2把efi轉化爲ROM
我的N100按照此方法提取出來的文件是:
CONF文件修改
igd/100.conf at main · gangqizai/igd (github.com),主要添加pci0和pci1的驅動定義:
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2 -set device.hostpci0.x-igd-opregion=on -debugcon file:/root/igd_debug.log -global isa-debugcon.iobase=0x402hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.romhostpci1: 0000:00:1f.3,romfile=gen12_gop.rom
  • aargs:
    • -set device.hostpci0.addr=02.0: 設定要通過的 PCI 設備的地址。
    • -set device.hostpci0.x-igd-gms=0x2: 設定整合顯示卡的顯存大小。
    • -set device.hostpci0.x-igd-opregion=on: 啟用 Intel 的整合顯示卡的 opregion。
    • -debugcon file:/root/igd_debug.log: 將調試輸出重定向到指定的日誌文件。
    • -global isa-debugcon.iobase=0x402: 設定 ISA debug console 的 IO 基址。
  • hostpci0:
    • 0000:00:02.0: 是 PCI 設備的地址,表示要被傳遞到虛擬機的硬體裝置。在這裡,它是一個集成顯示卡。
    • legacy-igd=1: 表示使用傳統的 IGD 模式。
    • romfile=gen12_igd.rom: 使用特定的 ROM 文件來初始化該硬體設備。
  • hostpci1:
    • 0000:00:1f.3: 另一個要通過到虛擬機的 PCI 設備的地址。
    • romfile=gen12_gop.rom: 使用特定的 ROM 文件來初始化這個硬體設備。

直通核顯而不需直通HDMI
有的情況我們並不需要虛擬機輸出HDMI,只是給核顯的性能讓虛擬機使用。最典型的是將GPU交給黑群暉/Plex/Jellyfin等做硬解:
若你是想把核显一起直通给黑群晖,需要把刚才引导文件的代码改为:
找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream video=efifbff,vesafbff"
在 /etc/modules 里面增加和上面一样的内容并更新,然后执行
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/pve-blacklist.confecho "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/pve-blacklist.confecho "blacklist i915" >> /etc/modprobe.d/pve-blacklist.confupdate-initramfs -u
回复

使用道具 举报

0

主题

3

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2023-10-24 12:15:46 | 显示全部楼层
Unknown kernel command line parameters "BOOT_IMAGE=/boot/vmliunz initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction", will be passed to user space.   我的N4120这是什么原因
回复

使用道具 举报

0

主题

3

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2023-10-24 12:23:07 | 显示全部楼层
[    3.714956] pci 0000:01:00.0: Adding to iommu group 5
[    3.720014] pci 0000:02:00.0: Adding to iommu group 5
[    3.725073] pci 0000:03:00.0: Adding to iommu group 5
[    3.730128] pci 0000:04:00.0: Adding to iommu group 5

4个网卡想分到不同的组,分不了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|康耐信(CncTion) ( 粤ICP备19035475号 )

GMT+8, 2024-3-28 19:51 , Processed in 0.096991 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表