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的加載因为使用两个rom文件,conf配置文件中,一个rom文件加在显卡,另一个加在声卡,大家注意一下。 hostpci0: 0000:00:02.0,legacy-igd=1,romfile=gen12_igd.rom
hostpci1: 0000:00:1f.3,romfile=gen12_gop.rom就能啓動。
簡單比較一下 GOP 與VBIOS : - GOP:沒有 64 KB 的檔案大小限制,需要在32 位元保護模式下執行,UEFI不需要搭配CSM,可以快速開機。
- VBIOS/IGD:有 64 KB 與127 KB的檔案大小限制,且必須要在16 位元執行環境。UEFI 需要搭配 CSM(也就是所謂的Legacy mode), 開機速度比GOP慢。
我的N100按照此方法提取出來的文件是: CONF文件修改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 |