如何為 AMD IOMMU 編譯 Gentoo 核心?
我有一個 AMD A4-5300 CPU 和一個支持 IOMMU 的主機板,我試圖在我的 Gentoo Hardened 4.3.3-r4 核心上啟用 IOMMU,目的是在 KVM VM 上使用顯卡。根據這裡的指南,我應該使用一些提供的選項(“支持 DMA 重新映射設備”、“啟用 DMA 重新映射設備”和“PCI Stub 驅動程序”)重新編譯我的核心。但是,我的核心配置中沒有“支持 DMA 重新映射設備”和“啟用 DMA 重新映射設備”。
然後我在配置中搜尋“remap”並嘗試啟用一些選項,它們是 CONFIG_IRQ_REMAP、CONFIG_DMAR_TABLE、CONFIG_IOMMU_SUPPORT、CONFIG_SWIOTLB 和 CONFIG_PCI_IOV。然後我在啟用這些選項的情況下重新編譯我的核心,
amd_iommu=fullflush iommu=force
在核心命令行上啟動我的系統,並根據上述指南,我通過在我的核心消息中查找“AMD-Vi”來檢查 IOMMU 是否在我的系統上執行:dmesg | grep AMD-Vi
我的核心日誌上沒有顯示任何關於 AMD-Vi 的資訊。
此外,當我嘗試使用附加的 PCI 設備在 virt-manager 上啟動 VM 時,我收到一條消息*“錯誤啟動域:不支持的配置:主機不支持主機 PCI 設備的直通”*。
我找到的幾乎所有東西都適用於 Fedora、Ubuntu 和 Debian,其中 IOMMU 顯然開箱即用。我不相信這是我的主機板和 CPU 不支持它的問題,因為我的 BIOS 有一個選項,而且因為我記得幾年前能夠在 Debian 上執行帶有 IOMMU 的 VirtualBox VM(儘管我沒有t 跟進它,因為我從沒想過我需要兩個顯卡才能通過 IOMMU 在 VM 上使用 GPU)。
這是我已經嘗試過但沒有奏效的方法:
- 使用標準核心而不是強化核心。
- 啟用設備驅動程序 >> IOMMU 硬體支持,AMD IOMMU 支持,使用 DMA 重映射設備支持 Intel IOMMU,支持中斷重映射和匯流排選項(PCI 等)>> PCI 存根。
- 使用最新的核心,目前剛剛升級到 4.4.8-hardened-r1。
這是我用來啟動核心的命令行,為方便起見,每個參數都在單獨的行中:
root=/dev/ram0 crypt_root=/dev/disk/by-uuid/c1ce6456-4c6a-4a64-8027-5ec4fdc0f344 dolvm real_root=/dev/mapper/cryptgentoo-raiz rootfstype=jfs real_init=/sbin/init root_keydev=/dev/disk/by-partuuid/086194de-e476-4abb-82da-9744e6fb0257 root_key=luks-key.gpg keymap=la amd_iommu=on iommu=on
我仍然缺少核心配置選項嗎?
***更新:***由於心不在焉,我錯誤地發布了
ps -ef | grep -i iommu
,看看我剛剛發現的……rockshooter ~ # ps -ef | grep iommu root 66 2 0 02:57 ? 00:00:00 [amd_iommu_v2]
如果我看到一個核心執行緒,我想我可能有機會讓 IOMMU 執行,只是我的核心沒有說明它。這只是一個瘋狂的猜測……但我會繼續嘗試使用它。
最後,經過多次哀號、抱怨和抨擊,我終於弄清楚發生了什麼事。
事實證明,IOMMU 一直在工作,只是核心日誌沒有顯示它。
ps -ef
但是 IOMMU 驅動程序在那裡,它正在工作,當我錯誤地輸入而不是dmesg
這樣時,我偶然發現:rockshooter ~ # ps -ef | grep -i iommu root 66 2 0 04:19 ? 00:00:00 [amd_iommu_v2]
當我看到核心執行緒執行時,我想,也許我的 IOMMU 真的在工作?所以我執行了與之前為 Debian 所做的相同的配置步驟,一小時後,你瞧,我在連接到顯卡的虛擬機上玩一些遊戲。
請保存此執行緒以供將來參考,因為我花了 3 週的時間才弄清楚這一點。我仍然給了另一張海報一些當之無愧的 +50 聲譽,因為我費心設置和測試這個問題。
IOMMU 主要選項
嘗試
Device Drivers >> IOMMU Hardware Support
:AMD IOMMU
然後啟用
AMD IOMMU support
.DMA 重新映射
使能夠
Support for Intel IOMMU using DMA Remapping Devices
可選:IRQ 重映射
使能夠
Support for Interrupt Remapping
可選:啟用版本 2 支持
AMD IOMMU Version 2 driver
PCI 選項
Bus options (PCI etc.) >> PCI Stub
從不
grep
使用配置文件,始終使用menuconfig
和/
鍵來搜尋所需的選項。您連結的指南存在三個問題:
- 它是為 Fedora/Redhat 使用者量身定做的。
- 由於#1,核心版本不同,因此選項位於不同的位置。
- Gentoo 的核心比指南中使用的核心更新。
更新
我的主機板太舊,無法支持 PCI Passthrough,但我希望您看到這些選項現在已正確啟用。使用我指示您使用的確切選項:
IOMMU 主要選項
AGP: Checking aperture... [ 0.000000] AGP: No AGP bridge found [ 0.000000] AGP: Node 0: aperture [bus addr 0xc4000000-0xc5ffffff] (32MB) [ 0.000000] Aperture pointing to e820 RAM. Ignoring. [ 0.000000] AGP: Your BIOS doesn't leave an aperture memory hole [ 0.000000] AGP: Please enable the IOMMU option in the BIOS setup [ 0.000000] AGP: This costs you 64MB of RAM [ 0.000000] AGP: Mapping aperture over RAM [mem 0xc4000000-0xc7ffffff] (65536KB) ... [ 0.959270] PCI-DMA: Disabling AGP. [ 0.959337] PCI-DMA: aperture base @ c4000000 size 65536 KB [ 0.959338] PCI-DMA: using GART IOMMU. [ 0.959340] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture ... [ 1.375277] AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de> [ 1.375277] AMD IOMMUv2 functionality not available on this system