如何将内核模块列入黑名单?
如何禁用加载不必要的内核模块。 内核3.2.4
注意:黑名单不适用于内核映像中内置的模块(即不通过单独的
.ko
文件加载。禁用此类模块的唯一方法是通过内核参数(如果可用)或重新编译内核。
只需打开/etc/modprobe.d/blacklist
文件并使用以下语法添加drivername:
blacklist driver-name
编辑:在12.10(12.04?)以后的版本中,文件是/etc/modprobe.d/blacklist.conf
重新启动您的盒子并使用lsmod命令显示Linux内核中模块的状态
注意 :此处driver-name
是所需黑名单驱动程序的名称。 例如,如果要禁用NIC卡驱动程序,可以使用终端中的命令lspci -v
命令找到LAN卡的内核驱动程序名称。
例如,我的输出是:
........ ........ 6:00.0以太网控制器:Broadcom Corporation NetLink BCM5906M快速以太网PCI Express(rev 02) 子系统:Lenovo Device 3861 标志:总线主控,快速转发,延迟0,IRQ 46 内存为b8000000(64位,不可预取)[size = 64K] [禁用]的扩展ROM function: 正在使用的内核驱动程序:tg3 内核模块:tg3 ........ ........
在这里,我看到驱动程序是tg3
。 所以你需要在driver-name
的位置写入tg3
(或你的驱动程序)。
这里有很多信息。
当您使用语法启动时,您还可以暂时将它们列在grub命令行(linux行)上
module_to_blacklist.blacklist=yes
在至少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-grub2
update-initramfs -u
。 重新启动后,只要启动后没有任何内容加载,您就可以免费使用该模块。
此方法也适用于EL变体(RHEL,CentOS,SciLinux),但您必须使用该发行版的方法来更新grub和initrd。
(注意那些试图将nouveau列入黑名单的人:确保不要通过运行systemctl set-default multi-user.target
来加载X,否则当X启动时它将再次加载nouveau!)
对于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屏幕不再被识别:{
在最近的版本中,您需要在黑名单文件中使用install指令
install modulename /bin/false
将上面的“modulename”替换为模块的名称。 这将强制阻止其加载。
您可以在modprobe.conf手册中找到有关install指令的更多信息
man modprobe.conf