nonaktifkan modul kernel yang dikompilasi dalam kernel (tidak dimuat)

18

Server saya memiliki dua kartu jaringan onboard 1-Gbit dan dua 10-Gbit.

Saya perlu menonaktifkan kartu jaringan 1-Gbit sepenuhnya, sehingga ifconfig -atidak menunjukkannya.

Kartu jaringan menggunakan modul kernel yang berbeda. Penggunaan 10-Gbit ixgbe, dan penggunaan 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 

Keduanya ixgbedan igbdikompilasi secara statis di kernel (bukan sebagai modul yang dapat di-load). Saya perlu menonaktifkan modul menggunakan parameter boot kernel.

Saya sudah mencoba menambahkan yang berikut ke kernel saya, tetapi tidak berpengaruh:

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

kartu jaringan igb masih ditampilkan

Bagaimana saya bisa menonaktifkan igb sepenuhnya?

Martin Vegter
sumber

Jawaban:

30

Anda harus dapat membuat daftar hitam igb"modul", bahkan ketika built-in, dengan memasukkan fungsi inisialisasi ke daftar hitam: tambah

initcall_blacklist=igb_init_module

ke parameter boot kernel Anda.

Lihat Bagaimana cara menonaktifkan dukungan I2C Designware saat tidak dibangun sebagai modul? untuk informasi latar belakang. Resep umum di sini adalah untuk mencari modul dalam kode sumber kernel, dan mencari fungsi yang memiliki __initatribut - seharusnya hanya ada satu yang dapat diidentifikasi sebagai fungsi inisialisasi utama (biasanya disebut dalam module_initdeklarasi). Daftar hitam itu, dan driver tidak akan diinisialisasi.

Stephen Kitt
sumber
4
Bagi mereka yang penting, initcall_blacklistparameter muncul di Linux 3.16 .
Ruslan
1
Apakah <modulename>_init_modulenama kanonik untuk masing-masing dan segala sesuatu yang dapat dibangun sebagai modul?
Bananguin
1
@Bananguin sayangnya tidak, ada beberapa yang dipanggil ..._init_moduleatau ..._module_inittetapi mereka tidak semua mengikuti pola itu.
Stephen Kitt