Tabla de contenidos
Resumen
La versión 2.6 del núcleo de Linux presenta una nueva solución de espacio del usuario para un directorio de dispositivo dinámico /dev con designaciones de dispositivo permanentes: udev. Ofrece sólo los archivos para dispositivos que en realidad están presentes. Crea o elimina archivos de nodos de dispositivo normalmente ubicados en el directorio /dev y, además, es capaz de renombrar las interfaces de red. La aplicación previa de un /dev dinámico con devfs se ha sustituido por udev.
Tradicionalmente, los nodos de dispositivo se almacenaban en el directorio /dev en los sistemas Linux. Había un nodo por cada tipo de dispositivo posible, sin tener en cuenta si existían realmente en el sistema. Como resultado, este directorio contenía miles de archivos sin utilizar. Antes de que se pudiera usar un subsistema recién añadido o un dispositivo de núcleo, había que crear los nodos correspondientes con una aplicación especial. El sistema de archivos devfs trajo consigo una mejora significativa porque sólo se les proporcionaba un nodo de dispositivo en /dev a los dispositivos que realmente existían y que el núcleo conocía.
udev introduce una nueva forma de crear nodos de dispositivo. El núcleo exporta su estado interno en sysfs y, cada vez que el núcleo reconoce un dispositivo, actualiza la información en sysfs y envía un evento al espacio del usuario. Con la información que sysfs ha puesto a disposición, udev hace coincidir una sintaxis de regla sencilla con los atributos de dispositivo proporcionados y crea o elimina los nodos de dispositivo correspondientes.
No es necesario que el usuario cree ninguna regla de udev para nuevos dispositivos. Si hay un dispositivo conectado, se crea automáticamente el nodo de dispositivo apropiado. Sin embargo, las reglas introducen la posibilidad de definir una directiva para controlar la asignación de nombres de dispositivos. También se añade la posibilidad de sustituir un nombre de dispositivo cifrado con un nombre que sea fácil de recordar, o bien tener nombres de dispositivo permanentes en los que dos dispositivos del mismo tipo se han conectado a la vez.
Imaginemos que dispone de dos impresoras: una impresora láser de alta calidad y otra de inyección de tinta en blanco y negro, ambas conectadas mediante USB. Aparecen como /dev/usb/lpX, donde X representa un número según el orden en el que se hayan conectado. Empleando udev, cree reglas de udev personalizadas dando a una impresora el nombre /dev/lasercolor y a la otra /dev/inyeccion. Puesto que udev crea estos nodos de dispositivo según las características del dispositivo, siempre señalarán al dispositivo correcto, sin tener en cuenta el orden de conexión ni el estado.
Antes de crear nodos de dispositivo debajo de /dev, udev lee todos los archivos de /etc/udev/rules.d que tengan el sufijo .rules en orden alfabético. Se usa la primera regla que coincide con un dispositivo, aunque existan otras reglas aplicables. Los comentarios se introducen mediante el signo almohadilla (#). Las reglas tienen la siguiente forma:
key, [key,...] NAME [, SYMLINK]
Debe especificarse al menos una clave, porque las reglas se asignan a los dispositivos según estas claves. También es fundamental especificar un nombre. El nodo del dispositivo creado en /dev llevará este nombre. El parámetro opcional symlink permite que los nodos se creen en otros lugares. Una regla para la impresora podría tener la siguiente forma:
BUS=="usb", SYSFS{serial}=="12345", NAME="lp_hp", SYMLINK+="printers/hp"
En este ejemplo, hay dos claves, BUS y SYSFS{serial}. udev compara el número de serie con el del dispositivo que está conectado al bus USB. Para asignar el nombre lp_hp al dispositivo en el directorio /dev, todas las claves deben ser idénticas. Además, se creará un enlace simbólico /dev/printers/hp que hace referencia al nodo del dispositivo. De igual forma, se crea automáticamente el directorio printers. Los trabajos de impresión pueden enviarse a /dev/printers/hp o a /dev/lp_hp.