¿Cómo poner en lista negra los módulos del kernel?

Respuestas:

44

Nota: las listas negras no funcionarán para los módulos que están integrados en la imagen del núcleo (es decir, no se cargan a través de un .koarchivo separado . La única forma de desactivar dichos módulos es a través de un parámetro del núcleo (si está disponible) o volviendo a compilar el núcleo.

Simplemente abra su /etc/modprobe.d/blacklistarchivo y agregue el nombre del controlador con la siguiente sintaxis:

blacklist driver-name

EDITAR: en versiones posteriores desde 12.10 (12.04?) El archivo es /etc/modprobe.d/blacklist.conf

Reinicie su caja y use el comando lsmod para mostrar el estado de los módulos en el kernel de Linux

Nota : aquí driver-nameestá el nombre de su controlador de lista negra deseado. Por ejemplo, si desea deshabilitar el controlador de la tarjeta NIC, puede encontrar el nombre del controlador del kernel para su tarjeta LAN mediante el comando de lspci -vcomando en una terminal.
Por ejemplo, mi salida fue:

........
........ 
6: 00.0 Controlador Ethernet: Broadcom Corporation NetLink BCM5906M Fast Ethernet PCI Express (rev 02)
    Subsistema: Dispositivo Lenovo 3861
    Banderas: maestro de bus, desarrollo rápido, latencia 0, IRQ 46
    Memoria en b8000000 (64 bits, no precargable) [tamaño = 64K]
    ROM de expansión en [deshabilitado]
    Capacidades: 
    Controlador de kernel en uso: tg3
    Módulos del kernel: tg3
........
........

Aquí, veo que el conductor está tg3. por lo que debe escribir tg3(o su controlador) en lugar de driver-name.

Se puede encontrar mucha información aquí .

LnxSlck
fuente
77
en mi caso ( Lubuntu 12.10), no hay un /etc/modprobe.d/blacklistarchivo. Hay un /etc/modprobe.d/blacklist.confarchivo
Abdull
1
Es mejor mantener los módulos en la lista negra de un usuario en un archivo separado para evitar conflictos durante la actualización (vea este comentario en serverfault ).
Alexander Pozdneev
1
El blacklist.confarchivo no necesita existir. Podría poner un archivo llamado my-mom-is-awesomeallí y funcionaría. Crea el nombre que quieras si quieres hacer un archivo específico solo para poner en una lista negra una cosa específica, como blacklist-nouveauo lo que sea.
doug65536
@ doug65536 esta pregunta se publicó hace 7 años, por supuesto, las cosas cambiarán. Simplemente cree una nueva pregunta con la versión de Ubuntu que tiene, para que la gente pueda ayudarlo
LnxSlck
@LnxSlck Estaba abordando la confusión expresada en comentarios anteriores. No quería ayuda ¿Qué pasa con la obsesión de no publicar en contenido antiguo? ¿Solo dejar que se pudra? La gente todavía encuentra esto y otros tendrán las mismas preguntas que he abordado.
doug65536
28

También puede incluirlos temporalmente en la lista negra en la línea de comandos de grub (línea de Linux) cuando inicia con la sintaxis

module_to_blacklist.blacklist=yes
Pantera
fuente
1
¿Cuánto tiempo es esto "temporal"? ¿Hasta el próximo arranque?
Seth
1
Seth, es temporal solo para el inicio único si editaste durante el inicio. Si edita usando /etc/grub.d/ scripts o / etc / default / grub, entonces es permanente.
Peter
1
Al parecer, esto no funciona para i915: i915: unknown parameter 'blacklist' ignored.
Rafał Cieślak
55
¿Cuál es la diferencia entre this y modprobe.blacklist=module_to_blacklist?
Zaz
44
o use el parámetro kernel modprobe.blacklist=module_to_blacklist(ver man modprobepara más detalles)
Karl Richter
11

Otra forma de incluir en la lista negra los módulos en al menos Ubuntu 16.04 LTS es agregar la siguiente línea a la línea de comando del kernel:

modprobe.blacklist=MODULE_NAME

Usar el sistema / etc / modprobe es la mejor manera, pero esta es una alternativa que se puede utilizar en caso de necesidad editando la línea de comandos de GRUB en el arranque.

Esto también puede hacerse permanente editando / etc / default / grub y agregando a la GRUB_CMDLINE_LINUX_DEFAULTvariable. Por ejemplo, en mi / etc / default / grub tengo:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modprobe.blacklist=nouveau"

Entonces corro update-grub2, entonces update-initramfs -u. Después de reiniciar, estará libre del módulo, siempre y cuando nada lo cargue después del inicio.

Este método también funciona en variantes EL (RHEL, CentOS, SciLinux), pero tendrá que usar los métodos de esa distribución para actualizar grub y el initrd.

(Nota para aquellos que intentan incluir en la lista negra a nouveau: asegúrese de no cargar X ejecutando systemctl set-default multi-user.target, de lo contrario, cuando X comience, ¡cargará nouveau nuevamente!)

Pablo
fuente
4

En versiones más recientes, debe usar la directiva de instalación en su archivo de lista negra

install modulename /bin/false

Reemplace "modulename" arriba con el nombre del módulo. Esto impedirá su carga por la fuerza.

Puede encontrar más información sobre la directiva de instalación en el manual de modprobe.conf

man modprobe.conf
Speeddymon
fuente
2
Esto es muy útil. Resulta que incluso con una entrada en la lista negra /etc/modprobe/blacklist.conf, el módulo aún se puede cargar manualmente modprobe <module_name>. El uso del install <module_name> /bin/falsemétodo hace que esto falle como se desea.
RawwrBag
3

Ninguna de estas soluciones funcionó en 16.04 LTS para i915.ko.

La solución (sucia) que encontré fue cambiar el nombre

/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

Desafortunadamente, la pantalla VGA externa ya no se reconoce: {

plaf
fuente
66
Todo lo que necesita es sudo update-initramfs -udespués de modificar los archivos /etc/modeprobe.d/
Ivan Black