wandres.dev
TU PRIMER MÓDULO · LKM y ciclo de vida

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.

⏱ 11 min

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.

🎯 Al terminar esta lección sabrás
  • 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
El contador de referencias mantiene el sistema coherente

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.

⚔️ Maneja módulos con soltura
  1. Carga tu módulo con insmod, y míralo en lsmod y /sys/module/hola/.
  2. Ejecuta modinfo hola.ko y localiza la licencia y la descripción.
  3. Intenta rmmod de un módulo en uso (p. ej. uno con “Used by” no vacío) y observa el rechazo.
  4. Investiga EXPORT_SYMBOL: cómo un módulo ofrece funciones a otros.