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

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

如何禁用不必要的内核模块的加载。内核 3.2.4

答案1

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

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

blacklist driver-name

编辑:自 12.10(12.04?)以来的版本中,该文件是/etc/modprobe.d/blacklist.conf

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

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

........
........
6:00.0 以太网控制器:Broadcom Corporation NetLink BCM5906M 快速以太网 PCI Express(rev 02)
    子系统:联想设备 3861
    标志:总线主控、快速设备、延迟 0、IRQ 46
    位于 b8000000 的内存(64 位,不可预取)[size=64K]
    扩展 ROM 处于 [已禁用]
    功能:
    正在使用的内核驱动程序:tg3
    内核模块:tg3
........
........

在这里,我看到驱动程序是tg3。所以您需要tg3在 的位置写入(或您的驱动程序)driver-name

可以找到大量信息这里

答案2

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

module_to_blacklist.blacklist=yes

答案3

在 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

这些解决方案均不适用于 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 屏幕不再被识别:{

相关内容