GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo vincular un dispositivo USB con un nombre estático?

Como se sugiere, puede agregar algunas reglas de udev. Edité el /etc/udev/rules.d/10-local.rules para contener:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

Puede verificar las variables de su dispositivo ejecutando

udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

Hay una guía más detallada que puede leer en http://www.reactivated.net/writing_udev_rules.html


La sintaxis de la regla anterior puede funcionar en algunas distribuciones, pero no funcionó en la mía (Raspbian). Como nunca encontré un solo documento que explicara todos los entresijos, escribí el mío propio, que se encuentra aquí. Esto es a lo que se reduce.
1. averiguar qué hay en ttyUSB:

dmesg | grep ttyUSB  

2. enumere todos los atributos del dispositivo:

udevadm info --name=/dev/ttyUSBx --attribute-walk

(con su(s) número(s) de dispositivo en lugar de x, por supuesto). Seleccione un conjunto de identificadores únicos, por ejemplo, idVendor + idProduct. También puede necesitar SerialNumber si tiene más de un dispositivo con el mismo idVendor e idProduct. SerialNumbers debe ser único para cada dispositivo.
3. Crea un archivo /etc/udev/rules.d/99-usb-serial.rules con algo como esta línea:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(asumiendo que no necesita un número de serie allí y, por supuesto, con los números de idVendor e idProduct que encontró en el paso 2.
4. Cargue la nueva regla:

sudo udevadm trigger

5. Verifique lo sucedido:

ls -l /dev/your_device_name  

mostrará a qué número ttyUSB fue el enlace simbólico. Si es /dev/ttyUSB1 , luego verifique quién es el propietario y a qué grupo pertenece:

ls -l /dev/ttyUSB1   

Entonces, solo por diversión:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

El problema de múltiples dispositivos USB idénticos

Tengo una Rasperry Pi con cuatro cámaras. Tomo fotos con fswebcam que identifica las cámaras como /dev/video0 .. video3 . A veces la cámara es video0 , vide02 , video4 y video6 pero podemos olvidarnos de eso por ahora.

Necesito una identificación persistente para identificar un número de cámara para que, p. video0 Siempre es la misma cámara porque subtitulo las fotos. Desafortunadamente, esto no sucede de manera confiable:en el arranque, las cámaras se enumeran como video0 ..video3 pero no siempre de la misma manera.

Todas las cámaras tienen el mismo ID y número de serie.

La solución a este problema implica reglas de udev, pero también hay muchos anzuelos.

Si emite el comando

udevadm info –attribute-walk –path=/dev/video0

obtienes una regla de salida pero los bits más destacados son

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

El bit KERNELS es un puerto concentrador USB. Con cuatro cámaras, hay cuatro de estas:no cambian al reiniciar, pero el video{x} asociado con un puerto puede cambiar.

Entonces, necesitamos una regla udev para vincular un número de video a un puerto concentrador USB, algo como:

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

Parece simple:acceda a la cámara con

fswebcam –d  $realpath /dev/camera0

Excepto que no funciona:si coloca esto en una regla udev y el sistema ha asignado video0 (en el arranque) a un puerto diferente, la regla udev se ignora. El enlace simbólico a /dev/camera0 básicamente dice no such device . Cuadrado uno.

Lo que queremos es vincular un enlace simbólico a una dirección de concentrador USB, no un video{x} número. Tomó un programa de Python.

El primer paso fue correr

fswebcam –d /dev/video${x}  tst.jpg

para x entre 1 y 8. La existencia de tst.jpg después de cada llamada identifica si hay una cámara en este número de video. A partir de esto, haga una lista de números de video activos. Mi experiencia ha sido que es 0,1,2,3 o 0,2,4,6 para las cámaras que he usado.

Por supuesto, otros pueden crear esta lista usando un proceso diferente.

Luego, para cada número de video en la lista, ejecute

udevadm info –attribute-walk –path=/dev/videox > dd

y extrae el KERNELS= line de dd . A partir de este proceso, obtendrá una lista de las direcciones de los puertos USB de las cámaras. Ordene esta lista para que en el siguiente paso, siempre la procese en el mismo orden. Llame a esto la "lista de direcciones".

Ejecute el udevadm … > dd otra vez y haz una lista que se parezca a

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

Ahora recorra la lista de direcciones; para cada entrada, busque la entrada correspondiente en la lista de videos. Cree una nueva lista que parezca una colección de líneas como

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

La x (número de enlace simbólico) se reemplaza por el número de secuencia en la lista de direcciones.

Ahora tienes una regla udev que funciona. Un enlace simbólico que está vinculado a una dirección de concentrador USB sin importar el número de video asignado a ese puerto en el arranque.

Escribe la lista final en un archivo /etc/udev/rules.d/cam.rules . Ejecute udevadm trigger para activarlo y el trabajo está hecho. /dev/camera2 será la misma cámara (puerto USB) independientemente de su número de vídeo.


Linux
  1. ¿Cómo ejecutar secuencias de comandos personalizadas en el complemento del dispositivo USB?

  2. Linux:¿cómo vincular un dispositivo USB con un nombre estático?

  3. ¿Cómo obtener información del proveedor y del producto USB mediante programación en Linux?

  4. Asignación de un número de dispositivo a un nombre de dispositivo lógico

  5. ¿Cómo puedo estar seguro de haber conectado un dispositivo a un puerto USB 3?

Cómo encontrar el uso de ancho de banda del dispositivo USB en Linux

Cómo usar una unidad USB en Debian 10

¿Cómo montar el dispositivo USB Leapfrog Tag?

¿Cómo mostrar una notificación cuando se inserta un dispositivo USB?

Cómo asignar IP estática a su dominio (con el ejemplo de GoDaddy)

¿Cómo se comprueba cuánta energía puede entregar un puerto USB?