Kernel module (Español)

Esta traducción de
Kernel module
fue revisada el
2022-10-09
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Problemas de arranque
Kernel
Parámetros del kernel
Compilar un módulo del kernel
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:
mkinitcpio
: véase
Mkinitcpio#MODULES
dracut
: véase
Dracut#Early kernel module loading
booster
: véase
Booster#Early module loading
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
Desactivar el pitido del altavoz del PC
Escribir un controlador WMI
- una introducción a LWM