Як зробити чорний список ядер модулів?


Відповіді:


44

Примітка: чорний список не буде працювати для модулів, вбудованих у зображення ядра (тобто не завантажуються через окремий .koфайл. Єдиний спосіб відключення таких модулів - через параметр ядра (якщо є) або шляхом перекомпіляції ядра.

Просто відкрийте /etc/modprobe.d/blacklistфайл і додайте ім'я драйвера, використовуючи наступний синтаксис:

blacklist driver-name

EDIT: У пізніших версіях з 12.10 (12.04?) Файл є /etc/modprobe.d/blacklist.conf

Перезавантажте поле і скористайтеся командою lsmod, щоб показати стан модулів у ядрі Linux

Примітка : тут driver-nameім'я потрібного драйвера чорного списку. Наприклад, якщо ви хочете відключити драйвер карти NIC, ви можете знайти ім'я драйвера ядра для вашої локальної картки, використовуючи команду lspci -vкомандування в терміналі.
Для прикладу мій вихід:

........
........ 
6: 00.0 Контролер Ethernet: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    Підсистема: Пристрій Lenovo 3861
    Прапори: майстер автобуса, швидкий devsel, затримка 0, IRQ 46
    Пам'ять на b8000000 (64-розрядна, попередньо не доступна) [size = 64K]
    Розширювальний ROM на [відключено]
    Можливості: 
    Використовуваний драйвер ядра: tg3
    Модулі ядра: tg3
........
........

Ось, бачу, водій є tg3. тому вам потрібно написати tg3(або ваш драйвер) замість driver-name.

Багато інформації можна знайти тут .


7
у моєму випадку ( Lubuntu 12.10) немає /etc/modprobe.d/blacklistфайлу. Є /etc/modprobe.d/blacklist.confфайл
Абдул

1
Краще тримати модулі в чорному списку користувача в окремому файлі, щоб уникнути конфліктів під час оновлення (див. Цей коментар на сервері за замовчуванням ).
Олександр Позднеєв

1
blacklist.confФайл не повинен існувати. Ви можете помістити туди файл, який називається my-mom-is-awesome, і він буде працювати. Складіть будь-яке ім’я, яке вам подобається, якщо ви хочете створити певний файл просто для чорного списку певної речі, як- blacklist-nouveauнебудь або будь-якої іншої .
doug65536

@ doug65536 це питання було розміщено 7 років тому, звичайно, все зміниться. Просто створіть нове запитання з
наявною

@LnxSlck Я звертався до плутанини, висловленої в попередніх коментарях. Я не хотів допомоги. Що з нав'язливістю не розміщувати старіший вміст? Просто залишити його гнити? Люди все ще знаходять це, а інші будуть мати ті самі запитання, які я адресував.
doug65536

28

Ви також можете тимчасово вносити їх у чорний список у командному рядку grub (рядок linux) під час завантаження синтаксису

module_to_blacklist.blacklist=yes

1
Як довго це "тимчасово"? До наступного завантаження?
Сет

1
Якщо ви редагували під час завантаження, це лише тимчасове завантаження. Якщо ви редагуєте за допомогою /etc/grub.d/ скриптів або / etc / default / grub, він є постійним.
Пітер

1
Мабуть, це не працює для i915 : i915: unknown parameter 'blacklist' ignored.
Rafał Cieślak

5
Яка різниця між цим і modprobe.blacklist=module_to_blacklist?
Заз

4
або скористайтеся параметром ядра modprobe.blacklist=module_to_blacklist(див. man modprobeподробиці)
Карл Ріхтер

11

Ще один спосіб ввести чорний список модулів принаймні у Ubuntu 16.04 LTS - додавши наступний рядок до командного рядка ядра:

modprobe.blacklist=MODULE_NAME

Використання системи / etc / modprobe - найкращий спосіб, але це альтернатива, яка може бути використана в крайньому випадку, редагуючи командний рядок GRUB під час завантаження.

Це також можна зробити постійним шляхом редагування / etc / default / grub та додавання до GRUB_CMDLINE_LINUX_DEFAULTзмінної. Наприклад, у моєму / etc / default / grub у мене є:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

То я біжу update-grub2, значить update-initramfs -u. Після перезавантаження ви будете без модуля, поки нічого не завантажує після завантаження.

Цей метод також працює у варіантах EL (RHEL, CentOS, SciLinux), але вам доведеться використовувати методи цього дистрибутива для оновлення grub та initrd.

(Зверніть увагу на тих, хто намагається в чорний список нуво: переконайтеся, що не завантажуйте X запускаючи systemctl set-default multi-user.target, інакше коли X запускається, він знову завантажить нуво!)


4

В останніх випусках вам потрібно використовувати директиву встановлення у вашому файлі чорного списку

install modulename /bin/false

Замініть "ім'я модуля" вище на ім'я модуля. Це насильно запобіжить навантаженню.

Ви можете знайти більше інформації про директиву встановлення в посібнику для modprobe.conf

man modprobe.conf

2
Це дуже корисно. Виявляється, навіть із записом у чорний список /etc/modprobe/blacklist.conf, модуль все ще можна завантажувати вручну modprobe <module_name>. Використання install <module_name> /bin/falseметоду робить цей збій за бажанням.
RawwrBag

3

Жодне з цих рішень не працювало 16.04 LTS для i915.ko.

Я знайшов (брудне) рішення перейменувати

/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

На жаль, зовнішній екран VGA більше не розпізнається: {


6
Все, що вам потрібно, це sudo update-initramfs -uпісля зміни файлів /etc/modeprobe.d/
Іван Чорний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.