En este artÃculo voy a describir el principio de un driver para Linux, a los cuales se les conoce como módulos.
Al momento de escribir esto, contaba con un kernel de la serie 2.6.9 pero igual deberÃa funcionar en otras versiones del kernel.
1) Requieres contar con el fuente de tu kernel, al momento de compilar
2) Tener make y GNU C instalado
* Yo me encuentro usando los que vienen por default en RedHat AS 4.0
Mi intención original era crear un driver del tipo C “Carácter�, el cual seria una simple variable para almacenar en RAM, pero por el momento solo será un modulo flotante en la memoria del sistema
El código de memoria.c
MODULE_AUTHOR ("Last Dragon 2006"); int cuenta (int n) return 0; }#include
MODULE_LICENSE ("GPL");
{
while (n++ < 5) printk ("he contado %d veces\n",n);
return n;
}
int init_module(void)
{
printk("<1> Instalando Driver en el Kernel\n");
cuenta(0);
}
void cleanup_module(void)
{
printk("<1> Retirando el Driver del Kernel\n");
Explicación, Cada que un driver en Linux arranca se llama a una función especifica que deberÃa existir en todo modulo, la entera init_module y cuando un modulo es retirado igual mente se busca cleanup_module
Básicamente usamos la init_module para inicializar y preparar el modulo y cleanup_module nos da la oportunidad de retirar todo lo hecho en el modulo, por ejemplo si alguna función se le asigno memoria con kmalloc, debemos liberarla y quitar las instancias a cualquier hardware o dispositivo abierto, por ahora el código es muy simple..
Inicia y manda un aviso a la consola que ha cargado y para que haga “algo� le he mandado a ejecutar una función que contara 5 veces y cada que cuenta mostrara en pantalla la cuenta, y para retirarlo. Igualmente manda un mensaje
Ahora vamos a compilarlo, Nota que no existe la función main, es como crear una librerÃa dinámica, pero esta será una librerÃa dinámica para el kernel, no para una aplicación .
Pasos para compilar
1) Crea un archivo Makefile
2) EscrÃbele en su interior
3) obj-m:= memoria.o
4) Ejecuta make, asi:
make -C /usr/src/kernels/2.6.9-5.EL-i686 SUBDIRS=/root/holamod modules
El segundo parámetro de Make es una ruta al directorio del kernel, tu debes poner la ubicación de tu kernel, el valor de subdirs es donde esta almacenado el código fuente de tu modulo. Yo estoy trabajando en /root/holamod, tu puedes escribir tu modulo en cualquier otra carpeta.
Si todo ha salido bien, ahora tienes en tu carpeta de desarrollo el archivo memoria.ko, que es el modulo. Ahora solo hay que probarlo
Revisemos la información del modulo, con modinfo
filename: memoria.ko
author: Last Dragon 2006
license: GPL
vermagic: 2.6.9-5.EL 686 REGPARM 4KSTACKS gcc-3.4
depends:
Parte de la información la esta tomando de:
MODULE_AUTHOR (“Last Dragon 2006”);
MODULE_LICENSE (“GPL”);
Citado en el código fuente de nuestro modulo
Montemos el modulo con el programa insmod, debes ser root
[root@linux holamod]# insmod memoria.ko > ins.txt
Instalando Driver en el Kernel
he contado 1 veces
he contado 2 veces
he contado 3 veces
he contado 4 veces
he contado 5 veces
El modulo se ejecuta, como se indica en el código.
Comprobemos que es parte del kernel
Con lsmod
Module Size Used by
memoria 1664 0
smbfs 66233 2
md5 4033 1
floppy 58481 0
ext3 116809 1
Ahora desmontemos nuestro modulo, con rmmod
[root@linux holamod]# rmmod memoria
Retirando el Driver del Kernel
Si has llegado hasta este punto, todo ha ido bien.
Hola, me gustarÃa saber como harÃa para crear un modulo para una impresora braille (Everest 4X4 Pro), ya que el sistema la reconoce pero no imprime nada, ni hace nada…gracias.