Breve tutorial para escribir drivers en Linux

Xavier Calbet

GULIC (Grupo de Usuarios de LInux de Canarias)

xcalbet@yahoo.es

"Do you pine for the nice days of Minix-1.1, when men were men and wrote their own device drivers?"

Linus Torvalds

Licencia

Copyright (C) 2001 Xavier Calbet.

Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, Versión 1.1 o cualquier otra versión posterior publicada por la Free Software Foundation. Puede consultar una copia de la licencia en: http://www.gnu.org/copyleft/fdl.html


Tabla de contenidos
Requisitos preliminares
Espacio de usuario ("user space") y espacio de kernel ("kernel space")
Funciones de intercambio entre el espacio de usuario y el espacio de kernel
Funciones de intercambio entre el espacio de kernel y el dispositivo hardware
El primer driver: carga y descarga del driver en el espacio de usuario
El driver "Hola mundo": carga y descarga del driver en el espacio de kernel
El driver completo "memoria": parte inicial del driver
El driver "memoria": conexión de dispositivos con sus ficheros
El driver "memoria": eliminando el módulo
El driver "memoria": abriendo el dispositivo como fichero
El driver "memoria": cerrando el dispositivo como fichero
El driver "memoria": leyendo del dispositivo
El driver "memoria": escribiendo al dispositivo
El driver "memoria" al completo
El driver real "puertopar": descripción del puerto paralelo
El driver "puertopar": inicio del módulo
El driver "puertopar": eliminando el módulo
El driver "puertopar": leyendo del dispositivo
El driver "puertopar": escribiendo al dispositivo
El driver "puertopar" al completo
LEDs para comprobar el uso del puerto paralelo
Aplicación final: luces centelleantes
Bibliografía

Requisitos preliminares

Para realizar drivers para Linux es necesario unos conocimientos previos mínimos que son:

Existen varios tipos de dispositivos diferentes en Linux. Por sencillez, en este breve tutorial veremos los dispositivos tipo char cargados como módulos. Se utilizará la versión del kernel 2.2.x (en concreto la 2.2.14), aunque los módulos funcionarán con modificaciones pequeñas o nulas en la versión 2.4.x.