如何防止核心模組影片驅動程序探測特定的顯卡設備
我的系統包含 2 張 Nvidia 卡。我想要實現的是一張由
nouveau
驅動程序驅動的卡,而另一張由官方nvidia
blob 驅動程序驅動。如果使用特定的 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 上。