BULMA

Bulma se une a la protesta contra SOPA y PIPA

Bergantells Usuaris de GNU/Linux de Mallorca i Afegitons   |   Bisoños Usuarios de GNU/Linux de Mallorca y Alrededores
CONTENIDOS
. Jornadas de software libre
. Version para PDA
. Enlaces breves
. La asociacion
. Los mas leidos
. Autores [Actividad]
. Ultimos Comentarios
. Todos los titulares!
. Estadisticas
. Guia de estilo
. ¿Sugerencias?
. Wiki
. XML [Ayuda]
Listas de correo
. Archivos bulmailing
. Archivos BulmaGes
Radio libre :-)
. Des de la Xarxa (Archivos)
. Mallorca en Xarxa
Busquedas

+ Enlaces Linux
Ultimos kernels
(20/06/2013 00:25:20)
    
Google


En bulma.net
En internet
udev: definir el nombre de los /dev para dispositivos removibles (33013 lectures)
Por Ricardo Galli Granada
gallir (http://mnm.uib.es/gallir/)
Creado el 14/11/2004 13:43 modificado el 14/11/2004 13:43

De algunos comentarios en mi artículo anterior, está claro que la gente prefiere unos artículos técnicos a mis... ergh... profundos ensayos filosofales... si queréis más circo, tengamos circo ;-). El tema es que tengo una Palm (cuya memory stick puede accederse vía usb-storage), un par de pendrives, un par de cámaras digitales, y me molestaba mucho tener que buscar el nombre del dispositivo en /dev cada vez que los enchufaba para luego hacer el mount. A grandes remedios grandes soluciones, instalé el udev y me aprendí el lenguage de reglas para definir los dispositivos. Es más fácil de lo que aparente, y potentísimo (ya veréis los avances espectaculares que se producirán en temas de removibles sobre GNU/Linux).

Pagina1/1

Como ya comenté, hay que instalar el udev. En Debian es directo, apt-get install udev y funciona sin problemas desde ese momento (suponiendo que tenéis el kernel correctamente configurado), aunque os recomiendo fuertemente que reiniciéis el sistema antes de trastear con él (al arrancarse crea unos dispositivos básicos que deben ser los que usa el kernel).

El udev es muy potente, básicamente crea un distema de ficheros en /dev (del tipo tmpfs) y allí crea dinámicamente los dispositivos a medida que el kernel los reconoce. Lo potente no solo está en que funciona como una seda, sino que admás casi todo lo hace en userspace, así que hacer que el usuario pueda definir como denominar a los dispositivos o indicar que cree enlaces simbólicos es sólo un paso.

Esas especificaciones van en el directorio /etc/udev/rules.d/ y se tienen que acabar con la extensión rules. Os explicaré brevemente mis tres reglas en /etc/udev/rules.d/mis_removibles.rules me permitieron tener un fstab como el siguiente:

/etc/fstab
...
/dev/sony1      /media/sony     auto    defaults,user,noauto  0   0
/dev/jetflash   /media/jetflash auto    defaults,user,noauto  0   0
...
# Fichero /etc/udev/rules.d/mis_removibles.rules
# Regla 1: Crea un enlace simbólico al primer dispositivo ttyUSB?
BUS="usb", SYSFS{manufacturer}="Palm. Inc.", KERNEL="ttyUSB[024]", NAME="%k", SYMLINK="pilot"

# Regla 2: Cuando el Palm se conecta como usb-storage crea los /dev/sony*
# con todas las particiones
BUS="usb", SYSFS{product}="Sony PEG Mass Storage", NAME{all_partitions}="sony"

# Regla 3: Crea el /dev/jetflash cuando se inserta my pendrive habitual
BUS="usb", SYSFS{manufacturer}="JetFlash", KERNEL="sd?1", NAME="%k", SYMLINK="jetflash"
# en este caso es equivalente a:
# BUS="scsi", SYSFS{vendor}="JetFlash", NAME="%k", KERNEL="sd?1", SYMLINK="jetflash"

El sistema de reglas es bastante sencillo, se deben cumplir las condiciones (en rojo) para que se ejecuten las acciones (en negro). Hay un tutorial bastante completo, pero en mi caso es obvio de imaginarse y/o bastante sencillo de explicar. Por ejemplo, BUS, SYSFS, y KERNEL son condiciones que se deben cumplir. NAME indica el nombre que deberá tener el dispositivo, SYMLINK si se crea un enlace simbólico y el %k es el nombre que le da el kernel por defecto.

Explicaré brevemente qué hace cada regla y finalmente como he creado la regla 3 (que es similar a las demás) con la ayuda del udevinfo.

Regla 1

Cada vez que se enchfe el Palm se crean dos dispositivos /dev/ttyUSB?. El Kpilot usa siempre el primero y me interesaba llamarlo /dev/pilot, así que crea ese enlace hacia el primero de los ttyUSB (que es el 0, 2, 4...).

$ ls -l /dev/ttyUSB* /dev/pilot
lrwxrwxrwx  1 root root         7 Nov 14 12:39 /dev/pilot -> ttyUSB0
crw-rw----  1 root dialout 188, 0 Nov 14 12:40 /dev/ttyUSB0
crw-rw----  1 root dialout 188, 1 Nov 14 12:39 /dev/ttyUSB1

Regla 2

El Sony Clié puede tener una memory stick que puede ser montada como un usb-storage normal. Tenía un pequeño gran problema. Cuando se conecta el Palm, éste no envía el tamaño de la memoria, por lo tanto el kernel no detecta inmediatamente la primera partición y el dispositivo no se crea en /dev. Usando el NAME{all_partitions} obligo el udev a que cree todas las particiones inmediatamente.

$ ls -l /dev/sony*
brw-rw----  1 root root 8, 32 Nov 14 12:38 /dev/sony
brw-rw----  1 root root 8, 33 Nov 14 12:38 /dev/sony1
brw-rw----  1 root root 8, 42 Nov 14 12:38 /dev/sony10
brw-rw----  1 root root 8, 43 Nov 14 12:38 /dev/sony11
brw-rw----  1 root root 8, 44 Nov 14 12:38 /dev/sony12
brw-rw----  1 root root 8, 45 Nov 14 12:38 /dev/sony13
brw-rw----  1 root root 8, 46 Nov 14 12:38 /dev/sony14
brw-rw----  1 root root 8, 47 Nov 14 12:38 /dev/sony15
brw-rw----  1 root root 8, 34 Nov 14 12:38 /dev/sony2
brw-rw----  1 root root 8, 35 Nov 14 12:38 /dev/sony3
brw-rw----  1 root root 8, 36 Nov 14 12:38 /dev/sony4
brw-rw----  1 root root 8, 37 Nov 14 12:38 /dev/sony5
brw-rw----  1 root root 8, 38 Nov 14 12:38 /dev/sony6
brw-rw----  1 root root 8, 39 Nov 14 12:38 /dev/sony7
brw-rw----  1 root root 8, 40 Nov 14 12:38 /dev/sony8
brw-rw----  1 root root 8, 41 Nov 14 12:38 /dev/sony9

Regla 3

Esta regla la uso para crer el enlace simbólico /dev/jetdrive que apunta al dispositivo SCSI que sea crea al enchufarlo (normalmente /dev/sd+). Veréis que hay una condición adicional, es para verificar que se trata del dispositivo de bloques SCSI y no unop de los dispositivos de emulación que se crean adicionalmente (/dev/sg?). La regla KERNEL=sd?1 indica que debe ser la partición 1 de uno de esos dispositivos (sda, sdb, sdc...).

$ ls -l /dev/jet*
lrwxrwxrwx  1 root root 4 Nov 14 12:22 /dev/jetflash -> sdb1

Cómo crear las reglas

Para poder crear esas reglas necesitáis saber un mínimo de información. El udevinfo os la dará. En el caso del jetflash, lo enchufo y veo con el comando dmesg que crea por defecto los dispositivos /dev/sdc y /dev/sdc1. Lo primero que hay que hacer es encontrar el path dentro del /sys para obtener la información completa del dispositivo. Para ello hacemos:

$ udevinfo -q path -n /dev/sdc1
/block/sdc/sdc1

Con esa información ejecutamos ahora el comando a continuación. Marqué en negrita la información relevante para crear las reglas:

$ udevinfo -a -p /block/sdc/sdc1
  ...
  looking at class device '/sys/block/sdc/sdc1':
    SYSFS{dev}="8:33"
    SYSFS{size}="250666"
    SYSFS{start}="62"
    SYSFS{stat}="       0        0        0        0"

follow the class device's "device"
  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.7/usb5...':
    BUS="scsi"
    ID="5:0:0:0"
    ...
    SYSFS{type}="0"
    SYSFS{vendor}="JetFlash"

    ...

  looking at the device chain at '/sys/devices/pci0000:00/0000:00:1d.7/usb5...':
    BUS="usb"
    ID="5-4"
    SYSFS{bConfigurationValue}="1"
    ...
    SYSFS{manufacturer}="JetFlash"
    SYSFS{maxchild}="0"
    SYSFS{product}="TS128MJF2A"
    SYSFS{speed}="480"
    SYSFS{version}=" 2.00"
    ...
 

Supongo que ya os habéis dado cuenta de dónde he obtenido la información para espeficiar la regla 3. Lo bueno del udev es que podéis modificar el fichero de reglas en cualquier momento y sólo tenéis que volver a enchufar el dispositivo para que ya tengan efectos vuestras modificaciones. No hace falta rearrancar nada... flexible y potente el udev ¿no?


Imprimir
Version para
imprimir

Imprimir
Version
PDF
Comentarios
Es posible que se hayan omitido algunos comentarios considerados poco constructivos
1.  Re: udev: definir el nombre de los /dev para dispositivos removibles (14/11/2004 23:47, #24239)
  Por: boney
Muy bueno y útil. Así estableces un punto de montaje para cada dispositivo que tengas, y lo haces una única vez; él se encarga de asignar /dev/sda1, sdb1,... con el directorio que toca. Ahora ya tengo la cámara y el usb extraible en marcha. Lo del Palm ya lo probaré en cuanto pueda robárselo a mi padre. Quisiera añadir que mantengo una línea como la siguiente en el fstab:
/dev/sda1 /mnt/usb vfat rw,noauto,user 0 0
para poder montar otros dispositivos usb menos cotidianos (de algún vecino, amigo, familiar,...). No sé si udev puede reconocer unidades que no se hayan añadido previamente a los ficheros de reglas, al estilo de "el resto de dispositivos móntalos aquí".
Ahora, ¿conoceis alguna manera de automontar cuando udev reconoce un dispositivo conectado?

 
2.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 11:00, #24245)
  Por: Anònim
Pues para automontar los dispositivos extraibles que detecta el udev tienes a gnome-volume-manager por ejemplo...

 
3.  Re: udev: definir el nombre de los /dev para dispositivos removibles (19/02/2006 11:58, #31071)
  Por: Enrique Gallego.
Perdona, ¿Y como puedo configurar las opciones de mantaje para que se automonte con gnome-volume-manager? Gracias.

 
4.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 12:13, #24246)
  Por: gallir (http://mnm.uib.es/~gallir/)
Y si quieres una solución KISS, mira el usbmount

 
5.  Re: udev: definir el nombre de los /dev para dispositivos removibles (18/11/2004 10:27, #24325)
  Por: Anònim
Ostiassss!!, es genial. Merci por esta/s aplicacion/es!!. Una preguntita... como localizo (si no tubiese instalado usbmount) que device (sda1, etc...) sobre el que esta montado el dispositivo para montarlo sobre el directorio que yo desee??. Lo digo porque si hago un lsusb, me dice sobre que puerto de usb esta instalado, pero no me dice si su device es sda1, etc... Chao

 
6.  Re: udev: definir el nombre de los /dev para dispositivos removibles (18/11/2004 10:32, #24326)
  Por: Anònim
Soy el del anterior mensaje. I'm sorry, ya esta explicado más arriba. Eso me pasa por listo y no leermelo todo "poquito a poquito". Chao

 
7.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 00:12, #24240)
  Por: DaniRC
>>De algunos comentarios en mi artículo anterior ...

Es que Ricardo, eres como Michael Jordan. Michael juega bien al beisbol, al golf, corre en motos de competicion, ... etc.

Pero lo suyo es verlo jugar a baloncesto ;-)

Nota para los lectores: A ver ... si para Jordan hay un "You can fly like an eagle" que podemos inventar para Ricardo ... tal vez un "You can code like a monkey" ;-)

 
8.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 02:04, #24241)
  Por: Anònim
Para que las reglas udev tengan efecto, a mi me ha hecho falta un pasillo mas: # /etc/init.d/udev force-reload


 
9.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 12:15, #24247)
  Por: gallir (http://mnm.uib.es/~gallir/)
Hummmmmmmm, no debería. ¿Puedes confirmarlo por favor? ¿En qué caso? ¿sólo cuando has agregado el fichero nuevo en el rules.d o también cuando cambias una línea?

 
10.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 13:33, #24248)
  Por: Anónimo
Hay un tema que no veo claro. ¿Se puede hacer que udev cargue automáticamente los módulos relacionados con los dispositivos que va detectando? Es que sino, los que tenemos en módulos lo que utilizamos poco, como el cdrom.ko, tenemos que andar haciendo modprobes para poder utilizarlo cuando con el árbol /dev de toda la vida, al acceder a /dev/cdrom el kernel carga el módulo automaticamente.

 
11.  Re: udev: definir el nombre de los /dev para dispositivos removibles (15/11/2004 13:43, #24250)
  Por: gallir (http://mnm.uib.es/~gallir/)
No, udev está solo pensado para gestionar el /dev, no para cargar drivers. Eso lo debe hacer en todo caso las modutils (modules.conf y compañía) o el hotplug.

 
12.  Re: udev: definir el nombre de los /dev para dispositivos removibles (16/11/2004 11:29, #24270)
  Por: Anónimo
Eso lo se, pero te pongo un ejemplo: Tienes una tarjeta de TV y su soporte compilado como módulos. En el /dev tradicional, cuando ejecutas la aplicación de TV esta intenta acceder a /dev/video, el kernel ve que no hay soporte asociado a ese dispositivo y le pasa el testigo a las modutils que terminan cargando los módulos y la aplicación puede funcionar. Con udev no se puede llegar a este automatismo porque no existe /dev/video si no has cargado previamente los módulos y ahí se queda la cosa. Te ves obligado a cargar manualmente los módulos con lo que pierdes parte de la funcionalidad de modutils. Para dispositivos que se enchufan en caliente udev está muy bien pero para el resto de dispositivos udev te obliga a, o una de dos, cargar los módulos manualmente o compilarlos de forma estática con lo que aumenta el tamaño del kernel, tarda mas en arrancar y ocupa más memoria. Vamos, que a mi modo de ver udev aporta más problemas que los que pretende solucionar.

 
13.  Re: udev: definir el nombre de los /dev para dispositivos removibles (16/11/2004 12:01, #24272)
  Por: gallir (http://mnm.uib.es/~gallir/)
No, estás equivocado en el sentido que el udev crea problemas, no creo ninguno. Lo que pasa es que pretendes que funcione algo que es relativamente una chapuza. En resumen, todo dispositivo presente en el sistema debe generar un evento hotplug (y cargar el módulo que toca).

Si lo que quieres es ahorrarte memoria puedes hacer como toda la vida, puedes crear el dispositivo estáticamente con el udev y configurar el modutils para que funcione como antes.

Del FAQ del udev:

Q: But wait, I really want udev to automatically load drivers when they
are not present but the device node is opened. It's the only reason I
like using devfs. Please make udev do this.
A: No. udev is for managing /dev, not loading kernel drivers.

Q: Oh come on, pretty please. It can't be that hard to do.
A: Such a functionality isn't needed on a properly configured system. All
devices present on the system should generate hotplug events, loading
the appropriate driver, and udev will notice and create the
appropriate device node. If you don't want to keep all drivers for your
hardware in memory, then use something else to manage your modules
(scripts, modules.conf, etc.) This is not a task for udev.

 
14.  Re: udev: definir el nombre de los /dev para dispositivos removibles (16/11/2004 12:06, #24273)
  Por: Anònim
Mira, yo creo que eso debe ser como el driver de NVidia, es decir, primero monta a mano los módulos de la tarjeta de TV, y luego copias los dispositivos que ella crea en /etc/udev/devices:

# cp -a /dev/video /etc/udev/devices

Y ve si esto te funciona

Saludos

 
15.  Re: udev: definir el nombre de los /dev para dispositivos removibles (24/11/2004 10:53, #24438)
  Por: Anònim
Hola:

Gracias por este artículo. Muy interesante.

Me preguntaba si no habría alguna forma de hacer esto sin necesidad de decirle el nombre comercial del dispositivo usb. Lo digo porque habitualmente utilizo el cd de knoppix en ordenadores que no son mios, y al conectarle mi disco usb, aparece un icono en el escritorio y puedo acceder a el.

Gracias. Salud.

 
16.  otros (05/01/2005 01:03, #24901)
  Por: Anónimo
tengo un notebook de esos que pueden intercambiar el cdrom y la disquetera (saco la disquetera y meto el cdrom y viceversa), el problema es que lo tengo con W$ y no me atrevo a ponerle linux porque no sé si funcionará la cosa. Esto del udev ¿Funcionará o la solución a mi problema es más sencilla de lo que creo?

 
17.  Re: udev: definir el nombre de los /dev para dispositivos removibles (07/01/2005 12:07, #24933)
  Por: Enrique
He comprobado que aparece el dispositivo /dev/fd1, pero yo solo tengo 1 disquetera. He leido que este sistema tiene unas desventajas, y una de ellas es el tema de que cuando se accede a un dispositivo que no está cargado en el módulo, antes se demandaba al dispositivo, y se cargaba el modulo correspondiente, ahora es a la inversa, es necesario cargar el modulo, antes de poder usar el dipositivo. ¿Que me podeis comentar sobre esto? Otra curiosidad es sobre que en el arranque dice "montando /dev", pero una vez arrancado, según el comando mount, no me aparece montado. ¿Me podeis explicar esto? Saludos Kike.

 
18.  Re: udev: definir el nombre de los /dev para dispositivos removibles (20/04/2005 04:30, #26305)
  Por: Fernando
Hola, realmente muy buen articulo tengo el reproductor de mp3 y la camara digital andando joya. Ahora probe de instalar el usbmount lo instala, conecto la camara pero no pasa nada.. estoy haciendo algo mal?? tengo que configurar algo mas?? muchas gracias

 
GRACIAS
Distribuciones Universal
Por el servidor
Dpto. de Matematicas e Informatica
Calificacion
***0
Vots: 18
Danos tu opinion:
**** Excelente
***0 Muy Bueno
**00 Bueno
*000 Regular
0000 Malo
SECCIONES
Noticia
Breve
Truco
Enlace
Participa
Proyecto
Articulo
Webbulma
Manoletada :-)
Seguridad
Modificado: 20/5/2012 21:26:29 | Tiempo Total: 0.081 segs | Kernel: Linux - i686 - 2.6.26-2-686 | Last boot: too much time ago!!
Powered by Apache    MySQL    PHP    Gimp