отключить модуль ядра, который скомпилирован в ядре (не загружен)

18

Мой сервер имеет две 1-Гбит и две 10-Гбит бортовые сетевые карты.

Мне нужно полностью отключить сетевые карты на 1 Гбит, чтобы ifconfig -aони не отображались.

Сетевые карты используют разные модули ядра. Использование 10 Гбит ixgbeи использование 1 Гбит 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 

Оба ixgbeи igbстатически скомпилированы в ядре (не как загружаемый модуль). Мне нужно отключить модуль, используя параметры загрузки ядра.

Я попытался добавить следующее к моему ядру, но это не имеет никакого эффекта:

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

сетевые карты igb все еще показывают

Как я могу полностью отключить igb?

Мартин Вегтер
источник

Ответы:

30

Вы должны иметь возможность занести в черный список igb«модуль», даже если он встроен в черный список его функции инициализации: добавить

initcall_blacklist=igb_init_module

к параметрам загрузки вашего ядра.

См. Как отключить поддержку I2C Designware, если она не встроена в модуль? для справочной информации. Общий рецепт здесь состоит в том, чтобы искать модуль в исходном коде ядра и искать функции, которые имеют __initатрибут - должна быть только одна, легко идентифицируемая как основная функция инициализации (обычно упоминаемая в module_initобъявлении). Черный список, и драйвер не будет инициализирован.

Стивен Китт
источник
4
Для тех, кому это важно, initcall_blacklistпараметр появился в Linux 3.16 .
Руслан
1
это <modulename>_init_moduleканоническое имя для каждого и все , что может быть построено как модуль?
Bananguin
1
@Bananguin, к сожалению, нет, многие звонят ..._init_moduleили ..._module_initне все следуют этим шаблонам.
Стивен Китт