Kernel module (Español)

From ArchWiki
Esta traducción de Kernel module fue revisada el 2022-10-09. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Los módulos del kernel son fragmentos de código que se pueden cargar y descargar en el kernel según se requiera. Extienden la funcionalidad del kernel sin necesidad de reiniciar el sistema.

Para crear un módulo del kernel, puede leer La guía de programación del módulo del kernel de Linux. Un módulo se puede configurar como integrado o cargable. Para cargar o eliminar dinámicamente un módulo, debe configurarse como un módulo cargable en la configuración del kernel (por lo tanto, la línea relacionada con el módulo mostrará la letra M).

Obtener información

Los módulos se almacenan en /usr/lib/modules/versión_kernel. Puede utilizar la orden uname -r para obtener la versión actual de su kernel.

Nota: Los nombres de los módulos a menudo utilizan guiones bajos (_) o guiones (-); sin embargo, esos símbolos son intercambiables cuando se utiliza la orden modprobe y en los archivos de configuración en /etc/modprobe.d/.

Para mostrar qué módulos del kernel están cargados actualmente:

$ lsmod

Para mostrar información sobre un módulo:

$ modinfo nombre_módulo

Para enumerar las opciones que se establecen para un módulo cargado:

$ systool -v -m nombre_módulo

Para visualizar la configuración completa de todos los módulos:

$ modprobe -c | less

Para mostrar la configuración de un módulo en particular:

$ modprobe -c | grep nombre_módulo

Para listar las dependencias de un módulo (o alias), incluido el propio módulo:

$ modprobe --show-depends nombre_módulo

Carga automática de módulos

Hoy en día, udev maneja automáticamente la carga de todos los módulos necesarios, por lo que si no necesita utilizar ningún módulo fuera del árbol del kernel, no es necesario colocar módulos que deben cargarse en el arranque en ningún archivo de configuración. Sin embargo, hay casos en los que es posible que desee cargar un módulo adicional durante el proceso de arranque, o incluir en la lista negra otro para que su computadora funcione correctamente.

systemd

Los módulos del kernel se pueden enumerar explícitamente en archivos bajo /etc/modules-load.d/ para que systemd los cargue durante el arranque. Cada archivo de configuración se nombra del tipo /etc/modules-load.d/programa.conf. Los archivos de configuración simplemente contienen una lista de nombres de módulos del kernel para cargar, uno en cada línea. Las líneas vacías y las líneas cuyo primer carácter que no sea un espacio en blanco sea # o ; se ignoran.

/etc/modules-load.d/virtio-net.conf
# Cargue virtio_net.ko en el arranque
virtio_net

Véase modules-load.d(5) para más detalles.

Carga anticipada del módulo

Es posible que la imagen initramfs no contenga los módulos del kernel solicitados en /etc/modules-load.d/, también puede que carezca de los archivos que se han configurado en esa carpeta. La carga anticipada del módulo depende del generador initramfs utilizado:

Manejo manual de módulos

Los módulos del kernel son manejados por herramientas proporcionadas por el paquete kmod. Puede utilizar estas herramientas manualmente.

Nota: Si ha actualizado su kernel pero aún no ha reiniciado, modprobe fallará sin mensaje de error y saldrá con el código 1, porque la ruta /usr/lib/modules/$(uname -r)/ ya no existe. Verifique manualmente si esta ruta existe cuando "modprobe" no pueda determinar si este es el caso.

Para cargar un módulo:

# modprobe nombre_módulo

Para cargar un módulo por nombre de archivo (es decir, uno que no está instalado en /usr/lib/modules/$(uname -r)/):

# insmod nombre_archivo [argumentos]

Para descargar un módulo:

# modprobe -r nombre_módulo

O alternativamente:

# rmmod nombre_módulo

Configurar las opciones del módulo

Para pasar un parámetro a un módulo del kernel, puede pasarlo manualmente con modprobe o asegurarse de que ciertos parámetros siempre se apliquen utilizando un archivo de configuración de modprobe o usando la línea de órdenes del kernel.

Manualmente en tiempo de carga utilizando modprobe

La forma básica de pasar parámetros a un módulo es utilizando la orden modprobe. Los parámetros se especifican en la línea de órdenes utilizando asignaciones simples de clave=valor:

# modprobe nombre_módulo nombre_parámetro=valor_parámetro

Utilizando archivos en /etc/modprobe.d/

Los archivos en el directorio /etc/modprobe.d/ se pueden utilizar para pasar la configuración del módulo a udev, que usará modprobe para administrar la carga de los módulos durante el arranque del sistema. Los archivos de configuración en este directorio pueden tener cualquier nombre, dado que terminan con la extensión .conf. La sintaxis es:

/etc/modprobe.d/myfilename.conf
options nombre_módulo nombre_parámetro=valor_parámetro

Por ejemplo:

/etc/modprobe.d/thinkfan.conf
# En ThinkPads, esto permite que el demonio 'thinkfan' controle la velocidad del ventilador
options thinkpad_acpi fan_control=1
Nota: Si alguno de los módulos afectados se carga desde initramfs, deberá añadir el archivo .conf apropiado a FILES en mkinitcpio.conf o utilizar el hook de modconf, luego regenere initramfs para incluir el archivo .conf. Para ver el contenido predeterminado de initramfs, utilice lsinitcpio.

Utilizando la línea de órdenes del kernel

Si el módulo está integrado en el kernel, también puede pasar opciones al módulo mediante la línea de órdenes del kernel. Para todos los cargadores de arranque comunes, la siguiente sintaxis es correcta:

nombre_módulo.nombre_parámetro=valor_parámetro

Por ejemplo:

thinkpad_acpi.fan_control=1

Simplemente añada esto a la línea del kernel de su cargador de arranque, como se describe en Parámetros del kernel.

Aliasing

Los alias son nombres alternativos para un módulo. Por ejemplo: alias mimod nombre_módulo_realmente_largo significa que puede utilizar modprobe mimod en lugar de modprobe nombre_módulo_realmente_largo. También puede utilizar comodines al estilo del intérprete de órdenes, por lo que alias mimod* nombre_módulo_realmente_largo significa que modprobe mimod-algo tiene el mismo efecto. Para crear un alias:

/etc/modprobe.d/myalias.conf
alias mimod nombre_módulo_realmente_largo

Algunos módulos tienen alias que se utilizan para cargarlos automáticamente cuando una aplicación los necesita. Desactivar estos alias puede evitar la carga automática, pero aún permitirá que los módulos se carguen manualmente.

/etc/modprobe.d/modprobe.conf
# Prevent Bluetooth autoload
alias net-pf-31 off

Lista negra

La lista negra, en el contexto de los módulos del kernel, es un mecanismo para evitar que se cargue el módulo del kernel. Esto podría ser útil si, por ejemplo, no se necesita el hardware asociado, o si cargar ese módulo causa problemas: por ejemplo, puede haber dos módulos del kernel que intentan controlar la misma pieza de hardware, y cargarlos juntos daría como resultado un conflicto.

Algunos módulos se cargan como parte de initramfs. mkinitcpio -M imprimirá todos los módulos detectados automáticamente: para evitar que initramfs cargue algunos de esos módulos, inclúyalos en la lista negra en un archivo .conf en /etc/modprobe.d y será añadido por el hook de modconf durante la generación de la imagen. Ejecutar mkinitcpio -v mostrará una lista de todos los módulos extraídos por varios hooks (por ejemplo, hook de filesystems, hook de block, etc.). Recuerde añadir ese archivo .conf a la matriz (array) FILES en /etc/mkinitcpio.conf si no tiene el hook de modconf en su HOOKS (por ejemplo, se ha desviado de la configuración predeterminada), y una vez que haya incluido en la lista negra los módulos regenere el initramfs, y reinicie después.

Utilizar archivos en /etc/modprobe.d/

Cree un archivo .conf dentro de /etc/modprobe.d/ y añada una línea para cada módulo que desee incluir en la lista negra, utilizando la palabra clave blacklist. Si, por ejemplo, desea evitar que se cargue el módulo pcspkr para evitar sonidos a través del altavoz de la computadora:

/etc/modprobe.d/nobeep.conf
# No cargar el módulo 'pcspkr' en el arranque.
blacklist pcspkr
Nota: La orden blacklist incluirá un módulo en la lista negra para que no se cargue automáticamente, pero el módulo puede cargarse si otro módulo que no está en la lista negra depende de él o si se carga manualmente.

Sin embargo, existe una solución para este comportamiento; la orden install indica a modprobe que ejecute una orden personalizada en lugar de insertar el módulo en el kernel como de costumbre, por lo que puede forzar que el módulo siempre falle al cargar con:

/etc/modprobe.d/blacklist.conf
...
install nombre_módulo /bin/true
...
Esto efectivamente incluirá en la lista negra ese módulo y cualquier otro que dependa de él.

Utilizar la línea de órdenes del kernel

Sugerencia: Esto puede ser muy útil si un módulo roto hace que sea imposible arrancar su sistema.

También puede incluir módulos en la lista negra desde el gestor de arranque.

Simplemente añada module_blacklist=nombremódulo1,nombremódulo2,nombremódulo3 a la línea del kernel de su gestor de arranque, como se describe en Parámetros del kernel.

Nota: Cuando incluye más de un módulo en la lista negra, tenga en cuenta que solo están separados por comas. Presumiblemente, los espacios o cualquier otra cosa podría romper la sintaxis.

Solución de problemas

Los módulos no cargan

En caso de que un módulo específico no se cargue y el registro de arranque (accesible ejecutando journalctl -b como superusuario root) diga que el módulo está en la lista negra, pero el directorio {{ic|/etc/modprobe.d/} } no muestra una entrada correspondiente, compruebe otro directorio fuente de modprobe en /usr/lib/modprobe.d/ para ver las entradas en la lista negra.

Un módulo no se cargará si la cadena "vermagic" contenida dentro del módulo del kernel no coincide con el valor del kernel que se está ejecutando actualmente. Si se sabe que el módulo es compatible con el kernel en ejecución actual, la verificación "vermagic" se puede ignorar con modprobe --force-vermagic.

Advertencia: Ignorar las comprobaciones de versión de un módulo del kernel puede provocar que el kernel se bloquee o que el sistema muestre un comportamiento indefinido debido a la incompatibilidad. Utilice --force-vermagic con la máxima precaución.

Véase también