next up previous contents index
Next: Nota sobre como dar Up: Mi primer módulo Previous: La tabla de símbolos   Índice General   Índice de Materias

Exportando nuestros propios símbolos

Nuestro módulo puede exportar una serie de símbolos que pueden ser usados por otros módulos. Por defecto, todas aquellas variables definidas como globales no estáticas serán exportadas4.9.

Pero en general no queremos exportar todas nuestras variables globales, y definir como estáticas las que no queremos exportar no es una solución aceptable. Por ello el kernel pone a nuestra disposición un mecanismo para dar de alta los símbolos que nosotros elijamos.

Al eliminar el módulo de la memoria estos símbolos exportados desaparecen, por lo que no es necesario darlos de baja desde cleanup_module().

El interfaz que ofrece el kernel para dar de alta símbolos es el siguiente:

El uso de estas macros viene detallado en /linux/module.h, es recomendable echarle un vistazo para ver que la receta de arriba es realmente cierta, esto mejorará nuestro conocimiento sobre los trucos y detalles de la programación en el kernel.

Para probar esto podemos modificar ligeramente nuestro módulo ``hola'':

/* módulo hola.c */
#include <linux/module.h>
#include <linux/kernel.h>

int var_a_exportar=1;
int var_que_no_quiero_exportar=2;

int init_module(void) {
        printk("hola: hola mundo %d,%d\n", var_a_exportar, 
                                  var_que_no_quiero_exportar);
        return 0;
}

void cleanup_module(void) {
        printk("hola: adios mundo\n");
}

Si insertamos este módulo, en /proc/ksyms aparecerán las dos variables globales.

Podemos incluir como primera linea de nuestro fichero #define EXPORT_SYMTAB y luego, tras definir las variables globales incluir EXPORT_SYMBOL(var_a_exportar). De esta manera, tras insertar el módulo, en /proc/ksyms solo aparecerá var_a_exportar.

Si en lugar de esto definimos EXPORT_NO_SYMBOLS, veremos como ninguna de nuestras variables globales aparece en /proc/ksyms.

Anímese a hacer estas tres pruebas, mejor que se le presenten los problemas ahora que no cuando esté trabajando con un módulo más complejo.


next up previous contents index
Next: Nota sobre como dar Up: Mi primer módulo Previous: La tabla de símbolos   Índice General   Índice de Materias
Alberto Cortés 2001-03-26