如何防止内核模块视频驱动程序探测特定的显卡设备

如何防止内核模块视频驱动程序探测特定的显卡设备

我的系统包含 2 个 Nvidia 卡。我想要实现的是一张卡由nouveau驱动程序驱动,而另一张卡由官方nvidiablob 驱动程序驱动。

如果 nvidia 驱动程序在启动时自动启动,使用特定的 nvidia 驱动程序选项“nvidia_340.NVreg_AssignGpus=0:02:00”,则两个驱动程序会成功共存。使驱动程序仅探测特定设备,并且使用 手动启动 nouveau 驱动程序modprobe,探测其他未使用的设备。

我想通过使两个模块在启动时加载来实现自动化,但我还没有设法告诉nouveau驱动程序仅探测两个显卡之一。模块的加载顺序似乎是不确定的,当 nouveau 模块在 nvidia 模块之前加载时,它会探测这两个模块并阻止官方 nvidia 访问另一个模块。

我知道我可以在启动阶段执行一个 systemd 服务任务modprobe nouveau(在加载 nvidia 模块后很好地执行),但我想有更好的方法来做到这一点。我想到了,udev但由于我不太了解,所以我不确定这是要走的路。

处理这个问题的正确方法是什么?

答案1

因此,解决方案的道路并不容易,但解决方案本身却出人意料地简单:

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需要防止内核重用 install 指令来启动 nvidia 模块,我认为这可能会导致某种无限循环。

install配置文件中的其他可用指令/etc/modprobe.d在 中得到了很好的解释man modprode.d

将 nouveau 驱动程序保留在黑名单中以防止其自行启动非常重要。在 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 上。

相关内容