El propósito original de los ficheros de dispositivo es permitir a los procesos comunicarse con los controladores de dispositivos en el núcleo, y a través de ellos con los dispositivos físicos (módems, terminales, etc.). La forma en la que esto se implementa es la siguiente.
A cada controlador de dispositivo, que es responsable de algún tipo de hardware, se le asigna su propio número mayor. La lista de los controladores y de sus números mayores está disponible en /proc/devices. A cada dispositivo físico administrado por un controlador de dispositivo se le asigna un número menor. El directorio /dev se supone que incluye un fichero especial, llamado fichero de dispositivo, para cada uno de estos dispositivos, tanto si está realmente instalado en el sistema como si no (Allí podemos encontrar los dispositivos conectados a las controladoras IDE (hda, hdb, hdc y hdd), el dsp de la tarjeta de sonido, etc.)
Por ejemplo, si haces ls -l /dev/hd[ab]*, verás todas las particiones de discos duros IDE que posiblemente estén conectadas a una máquina. Date cuenta de que todos ellos usan el mismo número mayor, 3, pero el número menor cambia de uno a otro.
Cuando el sistema se instaló, todos esos ficheros de dispositivos se crearon mediante la orden mknod. No existe un motivo técnico por el que tienen que estar en el directorio /dev, es sólo una convención útil. Cuando creamos un fichero de dispositivo con el propósito de prueba, como aquí para un ejercicio, probablemente tenga más sentido colocarlo en el directorio en donde compilas el módulo del núcleo.
Los dispositivos están divididos en dos tipos: los dispositivos de carácter y los dispositivos de bloque.
Los dispositivos de carácter son accedidos secuencialmente, un carácter cada vez. Algunos ejemplos de dispositivos de carácter son el ratón, el teclado, un terminal de texto, una cinta magnética, nulo
, etc.
Los dispositivos de bloque se caracterizan por ser de acceso aleatorio, la unidad mínima de lectura-escritura no es un carácter, sino un bloque (1KB). Algunos ejemplos de dispositivos de carácter son los discos duros, los disquetes, los CDROMS, etc.
La diferencia es que los dispositivos de bloque tienen un búfer para las peticiones, por lo tanto pueden escoger en qué orden las van a responder. Esto es importante en el caso de los dispositivos de almacenamiento, donde es más rápido leer o escribir sectores que están cerca entre sí, que aquellos que están más desperdigados. Otra diferencia es que los dispositivos de bloque sólo pueden aceptar bloques de entrada y de salida (cuyo tamaño puede variar según el dispositivo), en cambio los dispositivos de carácter pueden usar muchos o unos pocos bytes como ellos quieran. La mayoría de los dispositivos del mundo son de carácter, porque no necesitan este tipo de buffering, y no operan con un tamaño de bloque fijo. Se puede saber cuándo un fichero de dispositivo es para un dispositivo de carácter o de bloque mirando el primer carácter de la salida de ls -l. Si es `b' entonces es un dispositivo de bloque, y si es `c' es un dispositivo de carácter.