El ciclo de vida de un módulo
Las herramientas para manejar módulos: insmod, rmmod, modprobe, lsmod, modinfo y depmod. Dependencias entre módulos y dónde vive su estado en el sistema.
Cargar un módulo con insmod es solo el principio. El ecosistema de herramientas alrededor —modprobe, lsmod, modinfo, depmod— es lo que usarás a diario para gestionar, inspeccionar y depurar módulos. Conocerlas hace el desarrollo fluido.
- insmod vs modprobe.
- Inspeccionar módulos: lsmod, modinfo.
- Dependencias entre módulos y depmod.
- Dónde vive el estado de un módulo.
insmod vs modprobe
insmod
Carga un archivo .ko concreto, tal cual. NO resuelve dependencias: si tu módulo necesita otro, fallará. Ideal en desarrollo, con tu .ko a mano.
modprobe
Carga un módulo por nombre desde /lib/modules, resolviendo y cargando sus dependencias automáticamente. Lo que usa el sistema en producción.
sudo insmod ./hola.ko # carga este archivo
sudo modprobe hola # carga 'hola' + sus dependencias (si está instalado)
sudo rmmod hola # descarga
sudo modprobe -r hola # descarga con dependencias
Inspeccionar módulos
lsmod # módulos cargados, su tamaño y quién los usa
modinfo hola.ko # metadatos: licencia, autor, parámetros, dependencias
cat /proc/modules # la vista cruda del kernel de los módulos cargados
lsmod muestra una columna “Used by”: cuántos y cuáles otros módulos dependen de este. No puedes descargar un módulo si otros lo usan (su contador de referencias no es cero) — una protección del kernel contra tirar algo en uso.
Dependencias y depmod
Los módulos pueden usar símbolos exportados por otros (con EXPORT_SYMBOL). depmod analiza todos los módulos instalados y genera el mapa de dependencias que modprobe consulta:
sudo depmod -a # regenera el mapa de dependencias
Una idea que recorre todo el kernel: los contadores de referencias. Un módulo no se puede descargar mientras algo lo use; un dispositivo no se libera mientras un archivo lo tenga abierto; una estructura no se destruye mientras haya punteros a ella. El kernel lleva la cuenta de quién usa qué, e impide destruir algo con referencias vivas. Lo ves aquí con los módulos (“Used by” en lsmod), pero es el mismo patrón que gobierna la memoria (kref), los ficheros, los dispositivos. Es la respuesta del kernel —un entorno concurrente sin recolector de basura— a “¿cuándo es seguro liberar esto?”: cuando nadie lo referencia. Interioriza el conteo de referencias: es uno de los mecanismos que impiden que el kernel se corrompa a sí mismo.
Dónde vive el estado
Cada módulo cargado aparece en /sys/module/<nombre>/, con su información y sus parámetros (nivel 8.1) expuestos como archivos. Y todo lo que imprime va a dmesg. Estas dos ventanas —/sys/module/ y dmesg— son tu panel de control de módulos.
- Carga tu módulo con
insmod, y míralo enlsmody/sys/module/hola/. - Ejecuta
modinfo hola.koy localiza la licencia y la descripción. - Intenta
rmmodde un módulo en uso (p. ej. uno con “Used by” no vacío) y observa el rechazo. - Investiga
EXPORT_SYMBOL: cómo un módulo ofrece funciones a otros.