Bagaimana cara blacklist modul kernel?

Jawaban:

44

Catatan: daftar hitam tidak akan berfungsi untuk modul yang dibangun ke dalam kernel image (yaitu tidak dimuat melalui .kofile terpisah . Satu-satunya cara untuk menonaktifkan modul tersebut adalah melalui parameter kernel (jika tersedia) atau dengan mengkompilasi ulang kernel.

Cukup buka /etc/modprobe.d/blacklistfile Anda dan tambahkan drivername menggunakan sintaks berikut:

blacklist driver-name

EDIT: Dalam versi yang lebih baru sejak 12.10 (12.04?) File tersebut /etc/modprobe.d/blacklist.conf

Nyalakan ulang kotak Anda dan gunakan perintah lsmod untuk menampilkan status modul di Linux Kernel

Catatan : di sini driver-nameadalah nama driver daftar hitam yang Anda inginkan. Sebagai contoh, Jika Anda ingin menonaktifkan driver kartu NIC, Anda dapat menemukan nama driver kernel untuk kartu LAN Anda dengan menggunakan perintah lspci -vperintah di terminal.
Sebagai contoh, output saya adalah:

........
........ 
Pengontrol Ethernet 6: 00.0: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    Subsistem: Perangkat Lenovo 3861
    Bendera: bus master, cepat devsel, latensi 0, IRQ 46
    Memori pada b8000000 (64-bit, tidak dapat ditarik) [size = 64K]
    ROM Ekspansi di [dinonaktifkan]
    Kemampuan: 
    Driver kernel yang digunakan: tg3
    Modul kernel: tg3
........
........

Di sini, saya melihat pengemudi itu tg3. jadi Anda perlu menulis tg3(atau driver Anda) di tempat driver-name.

Banyak info dapat ditemukan di sini .

LnxSlck
sumber
7
dalam kasus saya ( Lubuntu 12.10), tidak ada /etc/modprobe.d/blacklistfile. Ada /etc/modprobe.d/blacklist.conffile
Abdull
1
Lebih baik membiarkan modul dimasukkan daftar hitam oleh pengguna dalam file terpisah untuk menghindari konflik selama peningkatan (lihat komentar ini di serverfault ).
Alexander Pozdneev
1
The blacklist.conffile tidak perlu eksis. Anda bisa meletakkan file yang disebut di my-mom-is-awesomesana dan itu akan berhasil. Buat nama apa pun yang Anda suka jika Anda ingin membuat file tertentu hanya untuk membuat daftar hitam hal tertentu, suka blacklist-nouveauatau apa pun.
doug65536
@ doug65536 pertanyaan ini diposting 7 tahun yang lalu, tentu saja semuanya akan berubah. Buat saja pertanyaan baru dengan versi Ubuntu yang Anda miliki, sehingga orang dapat membantu Anda
LnxSlck
@ LnxSlck Saya sedang mengatasi kebingungan yang disuarakan dalam komentar sebelumnya. Saya tidak ingin bantuan. Ada apa dengan obsesi untuk tidak memposting ke konten yang lebih lama? Biarkan saja membusuk? Orang-orang masih menemukan ini dan orang lain akan memiliki pertanyaan yang sama dengan yang saya tanyakan.
doug65536
28

Anda juga dapat membuat sementara daftar hitam mereka di baris perintah grub (garis linux) ketika Anda boot dengan sintaks

module_to_blacklist.blacklist=yes
Harimau kumbang
sumber
1
Berapa lama "sementara" ini? Sampai boot berikutnya?
Seth
1
Seth, ini hanya sementara untuk boot tunggal jika Anda diedit saat boot. Jika Anda mengedit menggunakan /etc/grub.d/ script atau / etc / default / grub, maka itu permanen.
Peter
1
Rupanya ini tidak bekerja untuk i915: i915: unknown parameter 'blacklist' ignored.
Rafał Cieślak
5
Apa perbedaan antara ini dan modprobe.blacklist=module_to_blacklist?
Zaz
4
atau gunakan parameter kernel modprobe.blacklist=module_to_blacklist(lihat man modprobeuntuk detail)
Karl Richter
11

Cara lain untuk membuat daftar hitam modul di setidaknya Ubuntu 16.04 LTS adalah dengan menambahkan baris berikut ke baris perintah kernel:

modprobe.blacklist=MODULE_NAME

Menggunakan sistem / etc / modprobe adalah cara terbaik, tetapi ini adalah alternatif yang dapat digunakan dalam keadaan darurat dengan mengedit baris perintah GRUB Anda saat boot.

Ini juga dapat dibuat permanen dengan mengedit / etc / default / grub dan menambahkan ke GRUB_CMDLINE_LINUX_DEFAULTvariabel. Sebagai contoh, di / etc / default / grub saya punya:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

Lalu aku lari update-grub2, lalu update-initramfs -u. Setelah reboot, Anda akan bebas dari modul, asalkan tidak ada yang memuatnya setelah boot.

Metode ini juga berfungsi dalam varian EL (RHEL, CentOS, SciLinux), tetapi Anda harus menggunakan metode distro itu untuk memperbarui grub dan initrd.

(Catatan untuk mereka yang mencoba blacklist nouveau: Pastikan untuk tidak memuat X dengan menjalankan systemctl set-default multi-user.target, jika tidak ketika X mulai akan memuat nouveau lagi!)

Paul
sumber
4

Dalam rilis yang lebih baru, Anda perlu menggunakan arahan instal dalam file daftar hitam Anda

install modulename /bin/false

Ganti "modulename" di atas dengan nama modul. Ini akan secara paksa mencegah pemuatannya.

Anda dapat menemukan lebih banyak info tentang arahan pemasangan di manual untuk modprobe.conf

man modprobe.conf
Speeddymon
sumber
2
Ini sangat membantu. Ternyata bahkan dengan masuknya daftar hitam /etc/modprobe/blacklist.conf, modul masih dapat dimuat secara manual modprobe <module_name>. Menggunakan install <module_name> /bin/falsemetode ini membuat ini gagal seperti yang diinginkan.
RawwrBag
3

Tak satu pun dari solusi ini yang bekerja pada 16,04 LTS untuk i915.ko.

Solusi (kotor) yang saya temukan adalah mengubah nama

/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

Sayangnya, layar VGA eksternal tidak dikenali lagi: {

celepuk
sumber
6
Yang Anda butuhkan adalah sudo update-initramfs -usetelah memodifikasi file /etc/modeprobe.d/
Ivan Black