jueves, 19 de agosto de 2010

Linux programar módulos para el Kernel en C


Este post busca ser una guia básica para crear módulos del kernel, entre el código fuente se encuentran tres modulos, se expone la forma de comunicar varios módulos, ademas también como crear un punto de entrada en el sistema de archivos virtual "proc" para poder establecer comunicación con los módulos desde espacio de usuario, los módulos dependen entre si de la siguiente forma, el modulo C no depende de nadie, el modulo B depende de C y el modulo A depende de B, asi que el primer modulo en ser insertado al kernel usando "insmod" es el modulo C , luego el modulo B y por ultimo el modulo A , el modulo A es el unico que incluye codigo para crear un archivo virtual en proc, este archivo se llama rudyMA

código fuente del modulo mas simple

#include <linux/module.h>
#include <linux/kernel.h>

void rudy_procesar_modulo_c(char *mensaje)
{
    printk(KERN_INFO "RUDY_MODULO_C %s", mensaje);
}

int init_module(void)
{
    printk(KERN_INFO "RUDY_MODULO_C INIT\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "RUDY_MODULO_C CLEANUP\n");
}

MODULE_LICENSE("GPL");
EXPORT_SYMBOL(rudy_procesar_modulo_c);

forma de probar los modulos

primero es necesario insertar los módulos al kernel
para esto usamos el comando insmod seguido del modulo que deseamos insertar por ejemplo

insmod moduloC.ko

esto debe cargar el modulo, y mostrar algunos mensajes de depuración en el log del sistema, para ver estos mensajes podemos usar el comando "dmesg"

luego con "lsmod" podemos ver la lista de módulos que están cargados actualmente, y con rmmod  descargar modulos. ( para usar rmmod hay que ser super usuario , igual que para usar insmod etc )

una vez cargados todos los módulos en el orden correcto podemos verificar su funcionamiento de la siguiente forma

echo "hola" > /proc/rudyMA

y

cat /proc/rudyMA

seguido de dmesg para ver los mensajes de depuración

para compilar los módulos, es necesario tener instalado el código fuente de nuestro kernel, y modificar los archivos Makefile apropiadamente con la carpeta correcta a nuestro código fuente, cumpliendo esto es suficiente con ejecutar "make" para regenerar los archivos .ko de cada modulo.

Descargar Código Fuente