如何阻止内核内置的驱动程序,即不是模块的驱动程序

use*_*291 9 drivers kernel kernel-modules modprobe linux-kernel

我使用nouveau内置于内核中的驱动程序配置和编译了 Linux 内核,即与在 Linux 内核源目录中执行时<*>相反。<M>make menuconfig

现在,我打算使用另一个驱动程序而不是nouveau. 如果nouveau是一个模块,我会blacklist nouveau在里面添加一行/etc/modprobe.d/blacklist.conf

我现在该怎么办。

小智 13

没有多少人知道这一点,但绝对有一种方法可以将内置于内核中的驱动程序列入黑名单。

首先,您应该运行lsmod | grep <driver_name>. 如果您没有看到任何结果,那么恭喜您 - 您的驱动程序直接内置于内核中,将其列入黑名单的正常方式将不起作用。相反,您需要将驱动程序的初始化函数列入黑名单。为此,您需要添加initcall_blacklist=<driver_init>一个内核启动选项,其中driver_init是驱动程序初始化函数 - 您必须查看内核的源代码以找出需要使用的名称。作为一个具体示例,initcall_blacklist=vmd_drv_init用作引导选项可防止英特尔的卷管理设备驱动程序加载并绑定到活动的卷管理设备控制器。

  • 还可以在“System.map”中查找函数名称。我是这样做的`fgrep elants /boot/System.map-5.8.0-23-generic | fgrep init` 用于解决 https://bugs.launchpad.net/ubuntu/+source/linux-oem-5.6/+bug/1900254/comments/6 (2认同)

SHW*_*SHW 7

您还可以在使用语法启动时在 grub 命令行(linux 行)上临时将它们列入黑名单

module_to_blacklist.blacklist=yes
Run Code Online (Sandbox Code Playgroud)

或者

modprobe.blacklist=module_to_blacklist
Run Code Online (Sandbox Code Playgroud)

您需要修改 grub,cfg 以使更改永久生效。

请注意,此解决方案不适用于少数模块