viernes, 12 de marzo de 2010

Agregar modulo al kernel 2.6.33

8. Agregando un modulo de Kernel
Para cargar un modulo de kernel es necesario realizar lo siguiente:
ls –l /lib/modules/`uname -r`
El resultado que se necesita seria uno como lo que a continuación se muestra:
lrwxrwxrwx 1 root root 07 mar 10 10:24 build -> /usr/src/linux-2.6.33
Esto es porque apunta a la raiz del código de nuestro kernel.
Ahora se mostrara un ejemplo con un archivo .c con el clásico Hola Mundo.
#include
#include
#include

static int hola_start(void)
{
printk(KERN_INFO "Cargando el modulo ...\n");
printk(KERN_INFO "Hola mundo!!\n");
return 0;
}

static void hola_end(void)
{
printk(KERN_INFO "Adios modulo!!\n");
}

module_init(hola_start);
modulo_exit(hola_end);
MODULE_DESCRIPTION("Prueba para cargar un modulo.");
MODULE_DESCRIPTION("Perla Diaz");
MODULE_DESCRIPTION("Edgar Garcia");
MODULE_DESCRIPTION("Dante Ramirez");

Después se requiere compilar y para esto se requiere el Makefile. Lo que se hará al compilar será detectar la ruta del directorio de los módulos, dirigirse a ese directorio y compilar el modulo desde ahí.
ifeq ($(KERNELRELEASE),)

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

.PHONY: build clean

build:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
else

$(info Building with KERNELRELEASE = ${KERNELRELEASE})
obj-m := hola.o

endif

Una vez compilado el kernel se obtendrá un archivo con la extensión .ko
Con modinfo hola.ko se obtiene la información de nuestro modulo.

9. Cargar y remover el modulo
Cargar el modulo:
insmod hola.ko
Mostrar los modulos:
lsmod
Para ver la información que debió imprimir nuestro modulo:
dmesg | tail
Para remover el modulo:
rmmod hola

No hay comentarios:

Publicar un comentario