Kernel module (Español)
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.
_
) 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.
/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
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
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
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.
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
.
--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