El primer driver: carga y descarga del driver en el espacio de usuario

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.