Necesito escribir un script para reiniciar los dongles USB. Tengo todas las herramientas, pero no puedo vincular mi / dev / ttyUSBx a BUS y DISPOSITIVO físicos. Un problema es que tengo tres dongles con el mismo proveedor de identificación y producto de identificación.
Si hago lsusb, la salida es:
Bus 001 Device 004: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 006: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 007: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem
Bus 001 Device 002: ID 80ee:0021
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Y lo he adjuntado a:
/dev/ttyUSB0
/dev/ttyUSB3
/dev/ttyUSB5
Pero quiero saber qué dispositivo está relacionado con qué dispositivo de bus. Por ejemplo, necesito obtener lo siguiente:
/dev/ttyUSB0 -> Bus 001 Device 006
/dev/ttyUSB3 -> Bus 001 Device 004
/dev/ttyUSB5 -> Bus 001 Device 007
Estoy usando Ubuntu Server 10.04 y probé las herramientas:
lsusb
hal
lsmod
Pero no puedo entender la relación.
Realmente no hay una buena manera de asignar dispositivos de caracteres como
/dev/ttyUSB0
el dispositivo USB correspondiente y los números de bus. PERO, es posible!Algo como esto podría funcionar:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
A partir de ahí, obtendrá una gran cantidad de información sobre el dispositivo y sus dispositivos principales. Ahora, solo se trata de analizar esos datos para obtener lo que desea. He usado esto en el pasado:
Ahora, si eso no es un bocado, ¡no sé qué es! Vamos a desglosarlo:
udevadm info --name=/dev/ttyUSB0 --attribute-walk
- devuelve información sobre el dispositivo y sus dispositivos principalessed -n 's/\s*ATTRS{\(\(devnum\)\|\(busnum\)\)}==\"\([^\"]\+\)\"/\4/p'
- analiza estos datos y devuelve cualquier línea que contenga el atributo "devnum" o "busnum". Asumiremos que "busnum" aparece primero ... y en ese caso ... podemos tomar las dos primeras líneas de salida.head -n 2
- Tome las primeras 2 líneas de salida. Podríamos ponernos más elegantes aquí, pero solo estamos asumiendo que el "busnum" y el "devnum" de los padres más cercanos se enumerarán primero.awk '{$1 = sprintf("%03d", $1); print}'
- Toma esos dígitos y los rellena con ceros.echo /dev/bus/usb
... - todo este jazz está envuelto en unaecho
declaración para reemplazar las nuevas líneas con espacios. Puede agregar-n
aecho
si desea cortar la nueva línea final.tr " " "/"
- reemplazar los espacios en la salida con barras diagonalesEsto generará algo como:
... que, por supuesto, es el dispositivo. Si lo desea, puede generar fácilmente algo como
busnum:001 devnum:011
con algunos ajustes:fuente
Puede encontrar toda la información sobre el nodo utilizando el siguiente comando:
fuente