wandres.dev
PARÁMETROS Y /SYS · module_param, sysfs, debugfs

Parámetros de módulo

Haz tu módulo configurable: module_param expone variables que el usuario ajusta al cargarlo o en caliente vía /sys, sin recompilar.

⏱ 10 min

Un módulo rígido sirve de poco. Los parámetros de módulo te dejan exponer opciones que el usuario ajusta al cargar (insmod hola valor=5) o incluso en caliente escribiendo en /sys. Es la primera forma de comunicación entre tu módulo y quien lo usa.

🎯 Al terminar esta lección sabrás
  • Declarar parámetros con module_param.
  • Permisos y exposición en /sys.
  • Documentarlos con MODULE_PARM_DESC.
  • Ajustarlos en carga y en caliente.

Declarar un parámetro

#include <linux/moduleparam.h>

static int veces = 1;                     // valor por defecto
module_param(veces, int, 0644);           // nombre, tipo, permisos
MODULE_PARM_DESC(veces, "Cuántas veces saludar");

static char *nombre = "mundo";
module_param(nombre, charp, 0644);
MODULE_PARM_DESC(nombre, "A quién saludar");

Al cargar, el usuario los ajusta:

sudo insmod hola.ko veces=3 nombre="kernel"

Los tipos soportados: int, uint, long, charp (cadena), bool, y arrays con module_param_array.

Permisos y /sys

El tercer argumento son los permisos del archivo que aparece en /sys/module/hola/parameters/:

cat /sys/module/hola/parameters/veces      # leer el valor actual
echo 5 | sudo tee /sys/module/hola/parameters/veces   # cambiarlo EN CALIENTE
Cambiar el comportamiento sin recargar

El detalle poderoso: si das permisos de escritura (0644), el parámetro se puede modificar mientras el módulo está cargado, escribiendo en su archivo de /sys. Tu código lee la variable actualizada la próxima vez que la use. Esto habilita depuración y ajuste en vivo: subir el nivel de verbosidad de un driver problemático en producción sin descargarlo, activar un modo de diagnóstico, ajustar un umbral — todo sin interrumpir el servicio ni recompilar. Es un anticipo de una idea central del kernel: exponer estado y controles como archivos (/sys, /proc, debugfs — nivel 8.2), de modo que interactuar con el kernel sea tan simple como leer y escribir ficheros. Esa uniformidad (“todo es un archivo”) es una de las decisiones de diseño más elegantes de Unix, y la usarás constantemente.

💡
Permisos con cabeza

Usa 0444 (solo lectura) para parámetros informativos que el usuario no debe cambiar en caliente, y 0644 para los ajustables. Nunca des escritura a todo el mundo (0666): los archivos de /sys los controla root por una razón. Y 0 significa “no aparece en /sys” (solo se puede fijar al cargar).

⚔️ Haz tu módulo configurable
  1. Añade a tu módulo un parámetro int y uno charp con module_param.
  2. Cárgalo pasándoles valores con insmod hola.ko ... y compruébalo en dmesg.
  3. Lee el parámetro en /sys/module/hola/parameters/.
  4. Cámbialo en caliente escribiendo en ese archivo y verifica que tu código ve el nuevo valor.