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.
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.
- 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
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.
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).
- Añade a tu módulo un parámetro
inty unocharpconmodule_param. - Cárgalo pasándoles valores con
insmod hola.ko ...y compruébalo endmesg. - Lee el parámetro en
/sys/module/hola/parameters/. - Cámbialo en caliente escribiendo en ese archivo y verifica que tu código ve el nuevo valor.