Jak umieścić na czarnej liście moduły jądra?

Odpowiedzi:

44

Uwaga: czarna lista nie będzie działać dla modułów wbudowanych w obraz jądra (tzn. Nie załadowanych przez osobny .koplik. Jedynym sposobem na wyłączenie takich modułów jest parametr jądra (jeśli jest dostępny) lub rekompilacja jądra.

Wystarczy otworzyć /etc/modprobe.d/blacklistplik i dodać nazwę sterownika, używając następującej składni:

blacklist driver-name

EDYCJA: W późniejszych wersjach od 12.10 (12.04?) Plik jest /etc/modprobe.d/blacklist.conf

Uruchom ponownie urządzenie i użyj polecenia lsmod, aby wyświetlić status modułów w jądrze Linux

Uwaga : oto driver-namenazwa żądanego sterownika czarnej listy. Na przykład, jeśli chcesz wyłączyć sterownik karty NIC, możesz znaleźć nazwę sterownika jądra dla swojej karty LAN za pomocą polecenia lspci -vcommand w terminalu.
Na przykład mój wynik to:

........
........ 
6: 00.0 Kontroler Ethernet: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    Podsystem: urządzenie Lenovo 3861
    Flagi: magistrala, szybki devsel, opóźnienie 0, IRQ 46
    Pamięć na b8000000 (64-bit, bez możliwości pobrania) [size = 64K]
    Rozszerzenie ROM w [wyłączone]
    Możliwości: 
    Używany sterownik jądra: tg3
    Moduły jądra: tg3
........
........

Widzę, że kierowca jest tg3. więc musisz napisać tg3(lub sterownik) zamiast driver-name.

Wiele informacji można znaleźć tutaj .

LnxSlck
źródło
7
w moim przypadku ( Lubuntu 12.10) nie ma /etc/modprobe.d/blacklistpliku. Jest to /etc/modprobe.d/blacklist.confplik
Abdull
1
Lepiej jest trzymać moduły na czarnej liście przez użytkownika w osobnym pliku, aby uniknąć konfliktów podczas aktualizacji (patrz ten komentarz przy błędzie serwera ).
Alexander Pozdneev,
1
blacklist.confPlik nie musi istnieć. Możesz umieścić tam plik my-mom-is-awesomei zadziała. Wymyśl dowolną nazwę, jeśli chcesz utworzyć konkretny plik, aby po prostu umieścić na czarnej liście określoną rzecz, na przykład blacklist-nouveaudowolną.
doug65536
@ doug65536 to pytanie zostało wysłane 7 lat temu, oczywiście wszystko się zmieni. Po prostu stwórz nowe pytanie z posiadaną wersją Ubuntu, aby ludzie mogli Ci pomóc
LnxSlck
@LnxSlck Odniosłem się do zamieszania wyrażonego w poprzednich komentarzach. Nie chciałem pomocy. Na czym polega obsesja na punkcie nie publikowania starszych treści? Po prostu zostaw to do zgnilizny? Ludzie nadal to widzą, a inni będą mieli te same pytania, które zadałem.
doug65536
28

Możesz także tymczasowo umieścić je na czarnej liście w linii poleceń grub (linia linux) podczas uruchamiania ze składnią

module_to_blacklist.blacklist=yes
Pantera
źródło
1
Jak długo jest to „tymczasowe”? Do następnego rozruchu?
Seth
1
Seth, jest tymczasowy tylko dla pojedynczego rozruchu, jeśli edytowałeś go podczas rozruchu. Jeśli edytujesz za pomocą skryptów /etc/grub.d/ lub / etc / default / grub, jest to stałe.
Peter
1
Najwyraźniej to nie działa na i915: i915: unknown parameter 'blacklist' ignored.
Rafał Cieślak
5
Jaka jest różnica między tym a modprobe.blacklist=module_to_blacklist?
Zaz
4
lub użyj parametru jądra modprobe.blacklist=module_to_blacklist(zobacz man modprobeszczegóły)
Karl Richter
11

Innym sposobem na czarną listę modułów w przynajmniej Ubuntu 16.04 LTS jest dodanie następującego wiersza do wiersza poleceń jądra:

modprobe.blacklist=MODULE_NAME

Najlepszym sposobem jest użycie systemu / etc / modprobe, ale jest to alternatywa, której można użyć w mgnieniu oka, edytując wiersz poleceń GRUB podczas rozruchu.

Można to również zrobić na stałe, edytując / etc / default / grub i dodając do GRUB_CMDLINE_LINUX_DEFAULTzmiennej. Na przykład w moim / etc / default / grub mam:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

Potem biegnę update-grub2, a następnie update-initramfs -u. Po ponownym uruchomieniu będziesz wolny od modułu, o ile nic nie załaduje go po uruchomieniu.

Ta metoda działa również w wariantach EL (RHEL, CentOS, SciLinux), ale będziesz musiał użyć metod tej dystrybucji do aktualizacji gruba i initrd.

(Uwaga dla tych, którzy próbują umieścić na czarnej liście nouveau: Upewnij się, że nie ładujesz X, uruchamiając systemctl set-default multi-user.target, w przeciwnym razie, gdy X się uruchomi , załaduje nouveau ponownie!)

Paweł
źródło
4

W nowszych wersjach należy użyć dyrektywy instalacyjnej w pliku czarnej listy

install modulename /bin/false

Zamień „modulename” powyżej na nazwę modułu. Zapobiegnie to ładowaniu.

Więcej informacji na temat dyrektywy instalacyjnej można znaleźć w instrukcji do pliku modprobe.conf

man modprobe.conf
Speeddymon
źródło
2
To jest bardzo pomocne. Okazuje się, że nawet przy wpisie z czarnej listy /etc/modprobe/blacklist.conf, moduł można nadal załadować ręcznie modprobe <module_name>. Zastosowanie tej install <module_name> /bin/falsemetody powoduje, że nie powiedzie się to zgodnie z oczekiwaniami.
RawwrBag
3

Żadne z tych rozwiązań nie działało na 16.04 LTS dla i915.ko.

(Brudnym) rozwiązaniem, które znalazłem, była zmiana nazwy

/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

Niestety zewnętrzny ekran VGA nie jest już rozpoznawany: {

plusk
źródło
6
Wystarczy sudo update-initramfs -uzmodyfikować pliki /etc/modeprobe.d/
Ivan Black,