Kernel – How to Disable Kernel Module Compiled in Kernel (Not Loaded)

bootkernellinux-kernel

My server has two 1-Gbit and two 10-Gbit onboard network cards.

I need to disable the 1-Gbit network cards completely, so that ifconfig -a does not show them.

The network cards use different kernel modules. The 10-Gbit use ixgbe, and the 1-Gbit use 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 

Both ixgbe and igb are compiled statically in the kernel (not as a loadable module). I need to disable the module using the kernel boot parameters.

I have tried appending the following to my kernel, but it has no effect:

igb.blacklist=yes
igb.enable=0
igb.disable=yes

the igb network cards are still showing

How can I disable igb completely ?

Best Answer

You should be able to blacklist the igb “module”, even when built-in, by blacklisting its initialisation function: add

initcall_blacklist=igb_init_module

to your kernel’s boot parameters.

See How do I disable I2C Designware support when it's not built as a module? for background information. The general recipe here is to look for the module in the kernel source code, and look for functions which have the __init attribute — there should only be one readily identifiable as the main initialisation function (typically referred to in a module_init declaration). Blacklist that, and the driver won’t be initialised.

Related Question