禁用在内核中编译的内核模块(未加载)

Mar*_*ter 18 boot kernel linux-kernel

我的服务器有两个 1-Gbit 和两个 10-Gbit 板载网卡。

我需要完全禁用 1-Gbit 网卡,以便ifconfig -a不显示它们。

网卡使用不同的内核模块。10-Gbit 使用ixgbe,1-Gbit 使用igb

01:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
Subsystem: Dell Ethernet 10G 4P X520/I350 rNDC
Kernel driver in use: ixgbe

05:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Subsystem: Dell I350 Gigabit Network Connection
Kernel driver in use: igb 
Run Code Online (Sandbox Code Playgroud)

双方ixgbeigb在内核中(而不是作为一个可加载模块)静态编译。我需要使用内核启动参数禁用该模块。

我曾尝试将以下内容附加到我的内核中,但没有效果:

igb.blacklist=yes
igb.enable=0
igb.disable=yes
Run Code Online (Sandbox Code Playgroud)

igb 网卡还在显示

如何完全禁用 igb?

Ste*_*itt 30

您应该能够igb通过将其初始化功能列入黑名单来将“模块”列入黑名单,即使是内置的:添加

initcall_blacklist=igb_init_module
Run Code Online (Sandbox Code Playgroud)

到内核​​的引导参数。

请参阅当 I2C 设计件不是作为模块构建时,如何禁用它?背景信息。这里的一般方法是在内核源代码中查找模块,并查找具有该__init属性的函数——应该只有一个容易识别的主初始化函数(通常在module_init声明中引用)。将其列入黑名单,驱动程序将不会被初始化。

  • 对于那些重要的人来说,`initcall_blacklist` 参数出现在 [Linux 3.16](https://kernelnewbies.org/Linux_3.16#Core) 中。 (4认同)