Linux

如何防止核心模組影片驅動程序探測特定的顯卡設備

  • May 16, 2017

我的系統包含 2 張 Nvidia 卡。我想要實現的是一張由nouveau驅動程序驅動的卡,而另一張由官方nvidiablob 驅動程序驅動。

如果使用特定的 nvidia 驅動程序選項“nvidia_340.NVreg_AssignGpus=0:02:00”在啟動時自動啟動 nvidia 驅動程序,則兩個驅動程序成功共存。使驅動程序僅探測特定設備,並且使用 手動啟動 nouveau 驅動程序modprobe,探測其他未使用的設備。

我想通過使兩個模組在啟動時載入來使事情自動化,但我沒有設法告訴nouveau驅動程序只探測兩個圖形卡中的一個。模組的載入順序似乎是不確定的,當 nouveau 模組在 nvidia 模組之前載入時,它會探測兩者並阻止官方 nvidia 訪問另一個模組。

我知道我可以modprobe nouveau在啟動階段執行 systemd 服務任務(在載入 nvidia 模組後執行良好),但我想有更好的方法來做到這一點。我想到了,udev但由於我不太了解,我不確定這是要走的路。

處理這個問題的正確方法是什麼?

因此,解決方案的道路並不容易,但解決方案本身卻出人意料地直截了當:

這個想法是install在配置文件中使用該指令/etc/modprobe.d/,重新定義 nvidia 驅動程序通過 modprobe 執行的方式。我在文件中設置了以下內容/etc/modprobe.d/nvidia-with-nouveau.conf

install nvidia_340 /sbin/modprobe --ignore-install nvidia_340; /sbin/modprobe nouveau

它指示核心如何啟動模組 nvidia(我的是 340 版)。通過這個指令,我告訴它先啟動 nvidia,然後是 nouveau。--ignore-install需要防止核心重用安裝指令來啟動可能導致某種無限循環的 nvidia 模組。

install``/etc/modprobe.d配置文件中的其他可用指令在man modprode.d.

將新手驅動程序列入黑名單以防止其自行啟動非常重要。在 Ubuntu 上,Nvidia 驅動程序,當通過來自官方 Ubuntu 儲存庫的 deb 包安裝時,通過安裝文件將 nouveau 模組列入黑名單/etc/modprobe.d/nvidia-340_hybrid.conf (它適用於我,在其他作業系統和驅動程序版本上可能不同)。

該文件包含以下內容:

blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

以下行為 nouveau 創建了一個別名,off並且必須註釋:

#alias nouveau off
#alias lbm-nouveau off

最後,我想,需要更新 initramfs 才能考慮到這些更改:

sudo update-initramfs -u

我現在可以享受多座位配置,一個座位在 nouveau 上,另一個在 nvidia-driver 上。

引用自:https://unix.stackexchange.com/questions/364963