如何将内核模块列入黑名单?


Answers:


44

注意:将黑名单不适用于内核映像中内置的模块(即未通过单独的.ko文件加载。禁用此类模块的唯一方法是通过内核参数(如果可用)或通过重新编译内核)。

只需打开/etc/modprobe.d/blacklist文件并使用以下语法添加驱动程序名称:

blacklist driver-name

编辑:在自12.10(12.04?)之后的更高版本中,文件为 /etc/modprobe.d/blacklist.conf

重新启动您的机器并使用lsmod命令显示Linux内核中模块的状态

注意:这driver-name是您所需的黑名单驱动程序的名称。例如,如果要禁用NIC卡驱动程序,则可以lspci -v在终端中使用command 命令来找到LAN卡的内核驱动程序的名称。
例如我的输出是:

........
........ 
6:00.0以太网控制器:Broadcom Corporation NetLink BCM5906M快速以太网PCI Express(修订版02)
    子系统:Lenovo Device 3861
    标志:总线主控,快速开发,延迟0,IRQ 46
    内存为b8000000(64位,不可预取)[size = 64K]
    扩展ROM处于[已禁用]
    能力: 
    使用的内核驱动程序:tg3
    内核模块:tg3
........
........

在这里,我看到驱动程序是tg3。因此,您需要tg3代替编写(或驱动程序)driver-name

这里可以找到大量信息。


7
在我的情况下(Lubuntu 12.10),没有/etc/modprobe.d/blacklist文件。有一个/etc/modprobe.d/blacklist.conf文件
Abdull

1
最好让用户在单独的文件中将模块列入黑名单,以避免升级期间发生冲突(请参阅serverfault上的此注释)。
亚历山大·波兹涅夫

1
blacklist.conf文件不需要存在。您可以在其中放置一个文件my-mom-is-awesome,该文件将起作用。如果要创建特定文件,只是要将特定事物(诸如此类)列入黑名单,则可以随意命名blacklist-nouveau
doug65536

@ doug65536这个问题发布于7年前,当然情况会有所变化。只要创建你所拥有的Ubuntu的版本,一个新的问题,所以人们可以帮你
LnxSlck

@LnxSlck我正在解决先前评论中表达的困惑。我不想要帮助。不发布较旧内容的痴迷又是什么?只是让它腐烂?人们仍然会发现这一点,其他人也会遇到与我相同的问题。
doug65536

28

使用语法启动时,也可以在grub命令行(Linux行)上将它们临时列入黑名单。

module_to_blacklist.blacklist=yes

1
这个“临时”需要多长时间?直到下一次启动?
塞斯(Seth)

1
赛斯(Seth),如果您在引导过程中进行了编辑,则它仅适用于单引导。如果使用/etc/grub.d/脚本或/ etc / default / grub进行编辑,则它将是永久的。
彼得

1
显然,这不适用于i915 :i915: unknown parameter 'blacklist' ignored
2014年

5
和之间有什么区别modprobe.blacklist=module_to_blacklist
Zaz 2015年

4
或使用内核参数modprobe.blacklist=module_to_blacklistman modprobe有关详细信息,请参见)
Karl Richter 2015年

11

至少在Ubuntu 16.04 LTS中将模块列入黑名单的另一种方法是在内核命令行中添加以下行:

modprobe.blacklist=MODULE_NAME

使用/ etc / modprobe系统是最好的方法,但这是一种替代方法,可以在启动时通过编辑GRUB命令行来使用。

也可以通过编辑/ etc / default / grub并将其添加到GRUB_CMDLINE_LINUX_DEFAULT变量中来使其永久化。例如,在我的/ etc / default / grub中,我有:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

然后我跑update-grub2,然后update-initramfs -u。重新引导后,只要引导后没有任何内容加载,就可以释放模块。

该方法也可以在EL变体(RHEL,CentOS,SciLinux)中使用,但是您必须使用该发行版的方法来更新grub和initrd。

(请注意那些试图将nouveau列入黑名单的人:请确保不要通过运行加载X systemctl set-default multi-user.target,否则X启动时,它将再次加载nouveau!)


4

在最新版本中,您需要在黑名单文件中使用install指令

install modulename /bin/false

将上面的“ modulename”替换为模块名称。这将强行阻止其加载。

您可以在modprobe.conf手册中找到有关install指令的更多信息。

man modprobe.conf

2
这非常有帮助。事实证明,即使输入了黑名单/etc/modprobe/blacklist.conf,仍可以使用手动加载该模块modprobe <module_name>。使用该install <module_name> /bin/false方法会使此操作失败。
RawwrBag

3

这些解决方案均无法在i915.ko的16.04 LTS上运行。

我发现的(脏)解决方案是重命名

/lib/modules/4.4.0-22-generic/kernel/drivers/gpu/drm/i915/i915.ko
/usr/lib/xorg/modules/drivers/modesetting_drv.so
/usr/lib/xorg/modules/drivers/intel_drv.so

不幸的是,外部VGA屏幕不再被识别:{


6
您需要做的只是sudo update-initramfs -u修改/etc/modeprobe.d/文件之后
Ivan Black
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.