LINUCA
LINUCA - Asociación de Usuarios GNU/Linux en Cantabria
CONTENIDOS
. La Asociación
. ¡ Apúntate a socio !
. Fotos
. Los más leídos
. Autores [Actividad]
. Últimos Comentarios
. ¡Todos los titulares!
. Guía de Estilo
. Cómo publicar en Linuca
. Links cortos
. Lista de Correo
   [Mensajes antiguos]
   [Etiqueta en la Lista]
. Todas las Listas
. ¿Sugerencias?
. ¡Sindícanos!
Gràcies Bulma!
Esta página usa el código fuente de Bulma :-)
Busquedas

Ultimos kernels
(19/04/2014 08:23:59)
Debian
Última actualización
stable: 08/02/2014
testing: 19/04/2014
unstable: 19/04/2014
Udev: Userspace devfs (14651 lecturas)
Por Alejandro
Ballfire (http://ballfire.ath.cx/~alex)
Creado el 21/02/2004 22:11 modificado el 21/02/2004 22:11

Este es un pequeño artículo en el que se da a conocer udev, el que se pretende que sea el sustituo de devfs

Pagina1/2

Udev: Userspace devfs

1 Introducción

Si sois un poco curiosos seguro que alguna vez habéis echado un ojo a /dev y os habrá llamado la atención la cantidad ingente de dispositivos que pueblan este directorio; seguro que alguno se ha preguntado para que valen...pues, sobre un 80%, para nada. Están ahí puestos por si acaso algún día apareciese ese dispositivo... Es decir, es una base de datos de POSIBLES dispositivos, pero que no reflejan para nada lo que hay conectado en nuestro sistema.

Esto viene de muy atrás y arranca en cómo el kernel contempla los dispositivos. Pero esto va a cambiar, y se pretende que la identificación de dispositivos sea mucho más flexible en el futuro (eliminar la dependecia de 'block number' y etc. en un futuro)

A raíz de esto nació devfs; se trata de un pseudo sistema de ficheros que se encarga de mantener una lista de dispositivos conectados al sistema y crear las entradas en /dev oportunas. Si bien esta característica hizo su entrada en la serie 2.5 y fue llevado a los 2.4, en el nuevo 2.6 se ha dado la característica por 'deprecated' (descontinuada) porque ha surgido udev y porque el manetenedor de devfs ha desaparecido.

udev es un asalto al mismo problema desde otra perspectiva; funciona por completo en espacio de usuario (en oposición a devfs que funcionaba en espacio de kernel) y su principal punto fuerte (mi preferido) es que permite personalizar el nombre de dispositivo.

Cualquiera que tenga hardware usb se habrá dado cuenta de que el dispositivo asignado a un dispositivo depende de lo que ya esté conectado al sistema o el orden en que se haya hecho. Esto es tremendamente incómodo de cara a automatizar los montados y desmontados de, por poner un ejemplo, un disco usb, o una cámara digital. Ya que, si por ejemplo, un día enchufamos primero el disco usb y después la cámara, recibirán /dev/sda y /dev/sdb; pero si otro día lo hacemos al revés, ¡los dispositivos se invierten!

Todo un lío de cara a crear scripts o, mismamente, crear accesos directos a nuestros dispositivos en el escritorio. Por suerte, tiene solución :-)

1.1 ¿Cómo funciona?

Bueno, el funcionamiento es más o menos simple:

  • Enchufamos nuestro dispositivo
  • El kernel se da cuenta de que algo está en marcha, detecta nuestro dispositivo y le pasa el control a hotplug1
  • Hotplug examina el tipo de dispositivo y carga módulos si son necesarios para dejar el dispositivo listo para usar
  • Hotplug notifica a udev que tiene un nuevo dispositivo conectado
  • udev se da por enterado, y se va a la partición sysfs a buscar la identificación del dispositvo; estos datos son contrastados con una serie de reglas de nomenclatura (más sobre esto más tarde) y le asigna una entrada de dispositivo.

2 Al asunto

Bien, antes de seguir, debo advertir que udev sólo está disponible para la serie 2.6 del kernel. Es decir, todo lo que se explica aquí es de aplicación exclusiva a esta serie.

2.1 ¿Qué se necesita para usarlo?

  1. Un kernel 2.6 http://www.kernel.org
  2. Haber configurado CONFIG_HOTPLUG a 'yes' cuando lo compilamos (o lo compilaron)
  3. Tener montado la partición sysfs2
  4. Tener instalados los scripts de hotplug linux-hotplug.sf.net
  5. udev, el programa de espacio de usuario, se puede encontrar en http://www.kernel.org/pub/linux/utils/kernel/hotplug/

2.2 Instalándolo

Es tan simple como descomprimir el archivo que nos habremos bajado (en el momento de escribir esto, la versión más moderna de la que tengo noticia es la 015) entrar al directorio, hacer 'make' y después, como root 'make install'

2.3 Configurándolo

Esto ya no es tan simple y aquí debemos trabajar un poquito más.

2.3.1 configuración general

La configuración general del sistema se hace a través de /etc/udev/udev.conf (esto podría cambiar en el futuro o haber sido personalizado). En este fichero será de nuestro interés principalmente

udev_root
Aquí se especifica en dónde debe crear los nodos udev. Es buena idea, de momento, conservar nuestro /dev y usar udev en otro directorio, como, por ejemplo, el /udev que viene por defecto.
default_mode
Aquí definimos los permisos por defecto para aquellos nodos que no tengan una regla fijada en udev.permissions
default_owner
A nombre de quién se crean los nodos
default_group
Bajo que grupo se crean los nodos.

2.3.2 Permisos

Aquí llega uno de los problemas de los que adolece udev ahora mismo; no recuerda los permisos que pusimos a un nodo con lo que (de momento, está en la lista de 'TODO') tenemos que crear un archivo contándole a udev con qué permisos queremos que cree cada nodo, el fichero tiene una sintaxis bastante facilona:

Se crea una nueva línea para dispositivo(s) con la forma: NOMBRE:USUARIO:GRUPO:PERMISOS por ejemplo, si queremos que la tarjeta de sonido (con un nombre genérico como dsp1) sea creado bajo la propiedad del usuario 'sonido', en el grupo 'multimedia' con permisos de lectura y escritura para el usuario, escritura al grupo, y lectura al resto, sería:

  dsp1:sonido:multimedia:0642

Se permiten los comodines y se aplican principalmente a los números de dispositivo (por ejemplo, para fijar permisos a todas las tarjetas de sonido, usaríamos dsp*)

Cabe mencionar que el programa trae archivos de configuración ya preparados en lo que a permisos se refiere tanto para debian como para gentoo que se pueden encontrar en ./udev/etc/udev

2.3.3 Nomenclatura

udev, como ya he mencionado permite personalizar el nombre que se asigna a los dispositivos, pero para ello, debemos definir una serie de reglas que identifiquen al dispositivo de forma inconfundible, para esto se define el archivo /etc/udev/udev.rules Hay que decir que tenemos unas posibilidades enormes, y que esto hace que la lista de opciones sea también enorme, podemos definir reglas en función de a qué bus se conecta un dispositivo, a qué puerto pci o usb, que lo llame en función de un programa que llamemos nosotros al conectar el disposito, que coincida con un determinado valor en las propiedades de sysfs, y etc.

Udev examinará la regla (cada línea es una regla) y si todas las condicions que hemos definido son ciertas, el dispositivo será llamado como se escifica con ``NAME'', si no, se asume la nomenclatura estándard del kernel. Un ejemplo de regla para udev.rules:

BUS="scsi", SYSFS{vendor}="TEAC ", NAME="disquetera%n"
Se puede ver como se define que es un dispositivo conectado al bus scsi (¡¡¡OJO!!! aquellos dispositivos que hacen uso de la emulación scsi; por ejemplo, usb-storage; se consideran conectados al bus SCSI), se define también que el fabricante es TEAC   pero, por favor, fijaos en los espacios, ¡la cadena debe coincidir literalmente!, y vemos como a este dispositivo se le llama ``disquetera%n''. El %n se refiere al número de dispositivo que da el kernel, por ejemplo, si conectamos la disquetera con un disquete con tres particiones, se creará disquetera, disquetra1, disquetera2 y disquetera3 (en donde el %n es sustituído por el número apropiado)

Mención especial requiere la opción de SYSFS{vendor}: En el árbol de sysfs se mantiene información sobre los dispositivos conectados, creando archivos que definen propiedades en su carpeta, es devir, lo que decimos con SYSFS{vendor}= ``TEAC  `` es que 'el archivo ``vendor'' bajo sysfs que corresponde a este dispositivo debe conetener la cadena TEAC', así, es posible usar cualquiera de los archivos para identificar al dispositivo. Una pequeña lista de posibles opciones para la identificación:

  • BUS   el tipo de bus al que se conecta
  • KERNEL   nombre del kernel
  • SYSFS_fichero   Coincidir el contenido del fichero de sysfs que definimos (sólo se pueden comprobar 5 archivos por norma) Atencion:en la release 018 se ha cambiado por SYSFS{fichero}
  • PROGRAM   Llama a un programa externo y considera que la condición se cumple si el programa devuelve 'éxito'
  • RESULT   se usa para afinar más con los programas externos, pidiendo esta regla que la salida del programa anterior coincida con lo que hemos definido
  • NAME   El nombre que le vamos a dar al dispositivo
  • SYMLINK   En caso de que queramos crear un enlace simbólico al dispositivo; se pueden crear más de uno
Tanto NAME, como SYMLINK aceptan ``comodines'' de la que se enuncia ahora los dos principales ( la lista completa con 'man udev'):

  • %n   El número que el kernel asigna (por ejemplo, hda3 tendría un %n de 3)
  • %k   El nombre del kernel
Eliminad lo

2.4 Consideraciones finales

Aunque udev promete mucho a los que usamos gran cantidad de dispositivos extraíbles es todavía un tanto experimental y sujeto a cambios, así que tal vez sea, durante un tiempo, buena idea mantener nuestro /dev de la distribución y mantener en paralelo un /udev para comprobar que tal funciona. Por no mencionar que si nos cargamos el /dev convencional y no lo reemplazamos por un dinámico bien configurado es muy posible que nos carguemos el sistema

No dudemos tampoco en probarlo por el hecho de que sea experimental, ya que el ``feedback'' que podemos aportar ayudará al desarrollo de estas características.

Y finalmente unas palabras de ánimo hacia aquellos usuarios de escritorio que todavía usan los 2.4, os estáis perdiendo la gozada del 2.6; avisados estáis.


Paginas:  1  2  Abreviatura Siguiente>>

Imprimir
Version para
imprimir

Imprimir
Version
PDF
Calificacion
***0
Votos: 25
Relacionados
. Usar discos USB sin la consola
SECCIONES
Artículo
Truco
Noticias
Breve
Enlace
Linuca
Libros
Tira ECOL
Tira Ecol
Modificado: 13/4/2009 13:31:53 | Tiempo Total: 0.015 segs | Kernel: Linux - x86_64 - 2.6.18-xen | Last Boot: 03/12/2010 01:21 CET
Powered By WEB-Bulma   Apache   Mysql   PHP   Gimp