Как занести в черный список модули ядра?

Ответы:

44

Примечание: занесение в черный список не будет работать для модулей, которые встроены в образ ядра (то есть не загружаются через отдельный .koфайл. Единственный способ отключить такие модули - через параметр ядра (если имеется) или перекомпиляцию ядра.

Просто откройте ваш /etc/modprobe.d/blacklistфайл и добавьте drivername, используя следующий синтаксис:

blacklist driver-name

РЕДАКТИРОВАТЬ: В более поздних версиях с 12.10 (12.04?) Файл /etc/modprobe.d/blacklist.conf

Перезагрузите ваш компьютер и используйте команду lsmod, чтобы показать состояние модулей в ядре Linux.

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

........
........ 
6: 00.0 Контроллер Ethernet: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (версия 02)
    Подсистема: Lenovo Device 3861
    Флаги: мастер шины, быстрая девсель, латентность 0, IRQ 46
    Память на b8000000 (64-битная, без предварительной выборки) [размер = 64 КБ]
    ПЗУ расширения в [отключено]
    Возможности: 
    Используемый драйвер ядра: tg3
    Модули ядра: tg3
........
........

Здесь я вижу, что водитель tg3. так что вам нужно написать tg3(или ваш драйвер) вместо driver-name.

Много информации можно найти здесь .

LnxSlck
источник
7
в моем случае ( Lubuntu 12.10) нет /etc/modprobe.d/blacklistфайла. Есть /etc/modprobe.d/blacklist.confфайл
Абдулл
1
Лучше хранить модули в черном списке пользователя в отдельном файле, чтобы избежать конфликтов во время обновления (см. Этот комментарий на serverfault ).
Александр Позднеев
1
blacklist.confФайл не должен существовать. Вы можете поместить туда файл, my-mom-is-awesomeи он будет работать. Создайте любое имя, которое вам нравится, если вы хотите создать определенный файл, просто чтобы занести в черный список конкретную вещь, например, blacklist-nouveauили что-то еще.
doug65536
@ doug65536 этот вопрос был опубликован 7 лет назад, конечно, все изменится. Просто создайте новый вопрос в
имеющейся
@LnxSlck Я обращался к путанице, озвученной в предыдущих комментариях. Я не хотел помочь. Что за навязчивая идея не публиковать старые материалы? Просто оставить это гнить? Люди все еще находят это, и у других будут те же вопросы, на которые я отвечал.
doug65536
28

Вы также можете временно поместить их в черный список в командной строке grub (linux line) при загрузке с синтаксисом

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.

(Примечание для тех, кто пытается занести в черный список nouveau: убедитесь, что X не загружается при запуске systemctl set-default multi-user.target, иначе при запуске X он снова загрузит nouveau!)

Павел
источник
4

В более поздних выпусках вам нужно использовать директиву install в вашем файле черного списка

install modulename /bin/false

Замените "modulename" выше на имя модуля. Это принудительно предотвратит его загрузку.

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

man modprobe.conf
Speeddymon
источник
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/
Иван Блэк,