Programación de un modulo del kernel simple
Copy&Page: http://systemadmin.es/2009/09/programacion-de-un-modulo-del-kernel-simple
Programación de un modulo del kernel simple
La programación de un módulo del kernel de Linux no es tan diferente de la programación de cualquier otro software, simplemente los errores se suelen pagar más caros. Vamos a ver el típico Hello World como módulo del kernel:
Primero de todo deberemos incluir algunos headers que contienen definiciones que vamos a necesitar:
#include <linux/init.h> #include <linux/module.h>
A continuación deberemos definir la licencia del modulo:
MODULE_LICENSE("GPL");
Si nos la inventamos simplemente nos avisara al hacer el insmod:
helloworld: module license 'xGPL' taints kernel.
A continuación deberemos definir las funciones de inicialización i destrucción del modulo en las cuales para este sencillo ejemplo haremos un simple printk (equivalente de printf en el kernel):
static int hello_world_init(void)
{
printk(KERN_ALERT "Hello World!\n");
return 0;
}
En la función de destrucción haremos lo mismo:
static void hello_world_exit(void)
{
printk(KERN_ALERT "Bye World!\n");
}
Finalmente deberemos indicar como hemos llamado a las funciones mediante module_init y module exit:
module_init(hello_world_init); module_exit(hello_world_exit);
Finalmente deberemos crear el fichero de Makefile:
obj-m += helloworld.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Es obligatorio que antes de los comandos “make” haya un tabulador y no un conjunto de espacios, sino no va a reconocer el formato del Makefile.
Con el comando make vamos a compilar el modulo del kernel:
# make make -C /lib/modules/2.6.18-53.1.21.el5PAE/build M=/home/jordi/helloworld modules make[1]: Entering directory `/usr/src/kernels/2.6.18-53.1.21.el5-PAE-i686' CC [M] /home/jordi/helloworld/helloworld.o Building modules, stage 2. MODPOST CC /home/jordi/helloworld/helloworld.mod.o LD [M] /home/jordi/helloworld/helloworld.ko make[1]: Leaving directory `/usr/src/kernels/2.6.18-53.1.21.el5-PAE-i686'
Mediante un ls podemos ver los ficheros que ha generado:
# ls helloworld.c helloworld.ko helloworld.mod.c helloworld.mod.o helloworld.o Makefile Module.symvers
Podemos cargar el módulo mediante insmod:
insmod helloworld.ko
A continuación mediante el dmesg podremos ver el Hello World:
audit(1254211500.001:3472101): user pid=1772 uid=0 auid=0 msg='insmod helloworld.ko ' Hello World!
Una forma de ver que el módulo esta cargado es mediante lsmod:
# lsmod | grep hel helloworld 5504 0
Para ver el “Bye World” lo descargamos mediante rmmod:
rmmod helloworld
Y de nuevo, con dmesg, podremos ver el mensaje de despedida:
audit(1254211613.892:3472132): user pid=1772 uid=0 auid=0 msg='rmmod helloworld' Bye World! audit(1254211627.421:3472133): user pid=1772 uid=0 auid=0 msg='dmesg
Related posts:
- Cookbook Libros de Programación He encontrado que en SAFARI están todos los lirbos...
Related posts brought to you by Yet Another Related Posts Plugin.
About this entry
You’re currently reading “Programación de un modulo del kernel simple,” an entry on Smultron POTENCIA !!
- Published:
- 10.20.09 / 10am
- Category:
- General

2 Comments
Jump to comment form | comments rss [?] | trackback uri [?]