next up previous
Siguiente: Ejemplo de tarea de Arriba: Las tareas de tiempo Previo: Las tareas de tiempo

Módulos de Linux

Un módulo no es más que un programa, que podemos hacer en C, pero que carece de función main. En su lugar, haremos siempre dos funciones: una para iniciar el módulo (init_module()) y la otra para finalizarlo (cleanup_module()). De este modo, cuando cargamos el módulo se ejecutará la función de inicio (desde la que llamaremos a otras) y cuando lo descarguemos se ejecutará la de finalización.

Un ejemplo mínimo sería el siguiente (podemos usarlo como plantilla para nuestros módulos):

#define MODULE
#include <linux/module.h>

static int x,y;

int init_module(void) {
    /* Aqui iniciamos el modulo, etc... */
    printk("Iniciando modulo...");
    return(0);
}

int cleanup_module(void) {
    /* Aqui liberamos recursos, etc... */
    printk("Finalizando modulo...");
    return(0);
}

Hacemos notar que, como el núcleo no dispone de salida estándar, no podemos usar las funciones de E/S con pantalla habituales (las de stdio.h) utilizando en su lugar, exclusivamente, printk. Todo lo que imprimamos con esta función irá al anillo de mensajes de Linux, que suele ser explorado por syslog para su registro y presentación en la consola4.

Para compilar el módulo, no podemos pedir que genere un ejecutable puesto que no contiene punto de entrada principal (la función main()). Se compila solo para producir el fichero objeto:

  gcc -O2 -Wall -D__KERNEL__ -c mimodulo.c

Una vez compilado, podemos probarlo desde la cuenta del superusuario. Lo cargaremos con el comando insmod mimodulo.o y lo descargaremos con rmmod mimodulo5. Puede comprobarse en los mensajes del núcleo que aparecen registradas las dos cadenas que hemos impreso en el ejemplo.

Es posible pasar parámetros al módulo. Para ello definiremos las variables globales static que hagan falta (ver las variables x e y del ejemplo) y luego darles valores al cargar el módulo. Por ejemplo, escribiendo: insmod mimodulo.o x=5 y=4.


next up previous
Siguiente: Ejemplo de tarea de Arriba: Las tareas de tiempo Previo: Las tareas de tiempo
Juan Jose Amor
1998-07-29