Veremos ahora un driver con el que empezar. Se introducirá dentro del kernel como un módulo.
Para ello se escribe este programa en un fichero llamado nada.c
<<nada.c>>= #define MODULE #include <linux/module.h> |
Lo compilamos con el siguiente comando:
$ gcc -c nada.c
(en realidad, para que funcione siempre sin problemas el comando para compilar debería ser
$ gcc -I/usr/src/linux/include -O -Wall -c nada.c ,
donde detrás de -I debe aparecer el directorio donde se encuentren los ficheros include del kernel)
Este elemental módulo pertenece al espacio de kernel y entrará a formar parte de él cuando se cargue.
Dentro del espacio de usuario podemos cargar el módulo en el kernel en la línea de comandos como usuario root con
# insmod nada.o
(si éste no funciona se puede probar insmod -f nada.o).
El comando insmod permite instalar nuestro módulo en el kernel, aunque éste en concreto no tenga ninguna utilidad.
Podemos comprobar que el módulo ha sido instalado mediante el comando que lista todos los módulos instalados:
# lsmod
Finalmente podemos eliminar el módulo del kernel con el comando
# rmmod nada
Podemos comprobar que el módulo ya no está instalado de nuevo con el comando lsmod.
Podemos ver un resumen de todo esto en la Tabla 3.
Eventos | Funciones de usuarios | Funciones del kernel |
Carga de módulo | insmod | |
Abrir dispositivo | ||
Leer dispositivo | ||
Escribir dispositivo | ||
Cerrar dispositivo | ||
Quitar módulo | rmmod |
Tabla 3. Eventos de los drivers y sus funciones asociadas de intercambio entre el espacio de kernel y el espacio de usuario.