Tenemos la contestación a este disgusto, al menos eso esperamos. Si sigues con alguna pregunta dínoslo, que sin dudas
Solución:
Como no tengo su hardware, no puedo darle una respuesta exacta.
Te sugiero que vayas al dispositivo en cuestión, por ejemplo:
ls -l /dev/ttyUSB0
y obtener los números de nodo mayor y menor. Digamos que son 116, 7
Luego ve a:
ls -l /sys/dev/char/116:7
(char
dado que un tty es un dispositivo de caracteres, si estuviera rastreando un dispositivo de disco, especificaría block
en vez de char
)
En el resultado del comando, verá algo parecido a:
lrwxrwxrwx 1 root root 0 Sep 6 00:17 116:7 -> ../../devices//sys/devices/pci0000:00/0000:00:13.5/pci0000:00/0000:00:13.5/usb1/1-3/1-3:1.1/sound/card1/pcmC1D0c
El directorio /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/
y sus subdirectorios tienen mucha información sobre el dispositivo. Como ejemplo, /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/busnum
y /sys/devices/pci0000:00/0000:00:13.5/usb1/1-3/devnum
. En mi sistema, estos coinciden con el número de bus y dispositivo mencionado en las entradas de hotplug del dispositivo en /var/log/syslog.
Algo más que funciona en mi sistema para /dev/video0:
find /sys/dev -lname '*video0' -exec cat /device/busnum /device/devnum ; 2>/dev/null
Realmente no hay un bueno manera de mapear dispositivos de caracteres como /dev/ttyUSB0
al dispositivo USB correspondiente y a 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á un montón 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:
echo /dev/bus/usb/`udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/s*ATTRS((devnum)=="([^"]+)"/4/p' | head -n 2 | awk '$1 = sprintf("%03d", $1); print'` | tr " " "/"
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 principales
sed -n 's/s*ATTRS(busnum))=="([^"]+)"/4/p'
– analiza estos datos y devuelve cualquier línea que contenga “devnum” o “busnum” attribute. Asumiremos que “busnum” aparece primero… y en ese caso… podemos tomar las dos primeras líneas de salida.
head -n 2
– Coge las primeras 2 líneas de salida. Podríamos ser más sofisticados aquí, pero solo estamos asumiendo que el “busnum” y el “devnum” del padre más cercano 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 un echo
declaración para reemplazar las nuevas líneas con espacios. Puedes agregar el -n
a echo
si desea cortar la nueva línea final.
tr " " "/"
– reemplazar los espacios en la salida con barras diagonales
Esto generará algo como:
/dev/bus/usb/001/011
… que, por supuesto, es el dispositivo. Si lo desea, puede generar fácilmente algo como busnum:001 devnum:011
con algunos ajustes:
echo `udevadm info --name=/dev/ttyUSB0 --attribute-walk | sed -n 's/s*ATTRS(busnum))=="([^"]+)"/1 4/p' | head -n 2 | awk '$1 = sprintf("%s:%03d", $1, $2); print $1;'`
Eres capaz de patrocinar nuestra misión exponiendo un comentario y dejando una puntuación te damos las gracias.