Red de conocimiento informático - Conocimiento informático - Cómo resolver el problema de los nombres de nodos de dispositivos USB inestables en Linux

Cómo resolver el problema de los nombres de nodos de dispositivos USB inestables en Linux

A menudo nos encontramos con el problema de que el nombre del nodo del dispositivo USB en Linux no está solucionado. La siguiente es la solución:

Tome el USB al puerto serie como ejemplo. Por lo general, el nodo del dispositivo se denomina ttyUSBx (x es 0 ~ n) y el kernel de Linux lo numerará según el orden en que se inserte el dispositivo. Por ejemplo, el primer dispositivo conectado tiene el número 0 y luego se agrega 1 en consecuencia.

Si solo usa el nodo de dispositivo ttyUSBn para distinguir qué dispositivo es, causará confusión porque el último número cambiará en cualquier momento. No hay garantía de que el dispositivo A sea 0 y el dispositivo B sea 1. De hecho, este problema se ha mencionado en LDD3. El kernel actual ha resuelto problemas similares y llevará todos los dispositivos USB al sistema de archivos sys. De hecho, cada puerto USB tiene un número de puerto único, que equivale al número de casa de cada tienda. Siempre que diferenciemos los dispositivos según los números de puerto, el problema está solucionado.

Por ejemplo, después de insertar dos dispositivos USB a serie en el dispositivo actual, verifique el número de puerto donde se encuentra ttyUSBn:

root @ Android: /$ ls -l/sys/class/ tty/

...

lrwxrwxrwx raíz raíz 2011-01-01 13:40 ttyusb 0-gt;../../devices/ ff 540000. USB/USB 3 /3-1/3-1.1/3-1.1: 1.0/ttyusb 0/tty/ttyusb 0

lrwxrwxrwx root root 2011-01-01 13:43 ttyusb 1- >../../dispositivos/ff 540000 .USB/USB 3/3-1/3-1.2/3-1.2:1.0/ttyusb 1/tty/ttyusb 1

root@android:/. $12345

< El número de puerto de p>ttyUSB0 es 3-1.1 y el número de puerto de ttyUSB1 es 3-1.2.

Lo mismo ocurre con otros tipos de dispositivos USB, y las ideas anteriores han quedado aclaradas.

Compruebe el dispositivo USB actual del sistema. El siguiente es el resultado de la clasificación en la segunda columna.

$ lsusb

Bus 001 Dispositivo 001: ID XXX: XXX Linux Foundation 2.0 Root Hub

Bus 001 Dispositivo 002: ID xxx: xxx Tasa de integración de Intel Corporation Concentrador coincidente

Bus 001 Dispositivo 003: ID xxx:xxx Genesys Logic, Inc. Lector de tarjetas flash SD/MMC/MS GL827L

Bus 001 Dispositivo 005: ID xxx:xxx Philips ( o NXP)

Bus 002 Dispositivo 001: ID XXX: XXX Linux Foundation 2.0 Root Hub

Bus 002 Dispositivo 002: ID xxx: xxx Intel Corporation Integrated Rate Matching Hub

Bus 002 Dispositivo 003: ID xxx: xxx Intel Corporation

Bus 003 Dispositivo 001: ID XXX: XXX Linux Foundation 2.0 Root Hub

Bus 004 Dispositivo 001: ID XXX: Hub raíz XXX Linux Foundation 3.0

La segunda columna es el número de concentrador del dispositivo USB. El dispositivo USB de la PC está conectado al concentrador. Incluso si su placa base proporciona muchos puertos USB, en realidad están conectados al concentrador.

La cuarta columna es el número de serie del dispositivo USB y el número de serie del dispositivo local.

Entonces, la información anterior muestra que hay cuatro concentradores USB (3 (tres USB2.0, un USB3.0). Si

está en negrita, hay tres en mi máquina Dispositivo , 001.003 es el lector de tarjetas que viene con el chasis, 001.005 es el teclado inalámbrico y 002.003 es el módulo Bluetooth de la tarjeta de red inalámbrica Intel (consulte los detalles a continuación)

Los dispositivos USB también se pueden encontrar en el archivo del kernel /sys/bus/. Se encuentra en usb/devices/. Linux asigna todos los controladores de dispositivos a

ls-1/sys/bus/USB/devices/

. 1-0:1.0

p>

1-1

1-1:1.0

1-1.2

1-1.2: 1.0

1 -1.4

1-1.4.1

1-1.4:1.0

1-1.4.1:1.0

1-1.4 .1: 1.1

1-1.4.1: 1.2

1-1.5

1-1.5: 1.0

1-1.5:1.1

1-1.5:1.2

2-0:1.0

2-1

2-1:1,0

2-1,5

2-1,5:1,0

2-1,5:1,1

3- 0:1,0

4-0: 1,0

usb1

usb2

usb3

usb4

Todos son enlaces simbólicos para usted. También puede usar ls -l /sys/bus/usb/devices/

El resultado parece confuso. Utilice la herramienta udevadm para enumerar claramente la información del dispositivo:

udevadm info-p/sys/bus/USB/devices/USB 1-q properties

Entonces, ¿cómo sabemos qué dispositivo USB es?

¿Dispositivo bus 002? 003: ID xxx:xxx Intel Corporation

La segunda columna 002 debe encontrarse en todos los archivos que comienzan con 2, y la siguiente columna coincide con la primera regla

2 - 0: 1,0

2-1

2-1: 1,0

2-1,5

2-1,5: 1,0<. /p >

2-1.5: 1.1

Normalmente, el concentrador USB del sistema ocupa el primer 0 después del signo negativo. El primer 2-0: 1.0 es el concentrador USB. p>El nivel 2-1.5* es el equipo anterior.

$ udevadm info-p/sys/bus/USB/devices/2-1.5-q properties

BUSNUM=002

DEVNAME=/dev/bus /usb/002/003

DEVNUM=003

.........................

ID_MODEL_ID=xxx

.............

ID_VENDOR=xxx

....... .....

ID _ PROVEEDOR _ DE _ BASE DE DATOS = Intel corp

............

002 y 003 son las columnas 2/4 y 6 de lsusb, de modelID y proveedor.

De aquí provienen las cosas en lsusb.

La pregunta es, ¿cómo sabes que es Bluetooth? La respuesta es seguir consultando udevadm:

$ udevadm info-p/sys/bus/USB/devices/2-1.5:1.0-q atributo

ID _ USB _ CLASS _ FROM _ BASE DE DATOS = Inalámbrico

ID _ USB _ PROTOCOLO _ FROM _ BASE DE DATOS = BLUETOOTH

ID _ USB _ SUBCLASE _ FROM _ BASE DE DATOS = RF

ID _ PROVEEDOR _ DE _ BASE DE DATOS = Intel corp