ver puertos listar escanear dispositivos desde consola comando acceder linux serial-port usbserial

puertos - ver usb en linux



¿Cómo saber qué dispositivo USB-RS232 está en qué tty? (3)

Tengo dos dispositivos USB diferentes basados ​​en los mismos chips USB-RS232. Cuando los conecto al USB, están montados en /dev/ttyUSB0...3

Mi problema es cómo, dentro de un script, puedo averiguar cuál está en qué tty?

Usando lsusb puedo diferenciarlos:

$> lsusb | grep 0403:f850 Bus 004 Device 002: ID 0403:f850 Future Technology Devices International, Ltd $> lsusb | grep 0403:6001 Bus 004 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Y usando dmesg puedo decir dónde fueron montados:

$> dmesg | grep ''FTDI USB Serial Device converter now attached'' [36051.393350] usb 4-2: FTDI USB Serial Device converter now attached to ttyUSB1 [36061.823513] usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB0

Pero "usb 4-1" no parece corresponder con "Bus 004 Device 002".

¿Puedo suponer que "Bus 004 Device 001" siempre será un "concentrador de raíz USB" y, por lo tanto, dmesg contará desde 1 en adelante y lsusb desde 2 en adelante?

¿O tiene otra sugerencia sobre cómo correlacionar la identificación del dispositivo con el punto de montaje (dentro de un script)?

Estoy usando Ubuntu 10.04 LTS.


Encuentra más información usando sysfs:

$ ls /sys/bus/usb-serial/devices/ -ltrah lrwxrwxrwx 1 root root 0 2012-02-07 22:17 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0 $ ls -ltrad /sys//devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0 drwxr-xr-x 4 root root 0 2012-02-07 22:17 /sys//devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0 $ ls -ltrad /dev/ttyUSB0 crw-rw---- 1 root dialout 188, 0 2012-02-01 00:17 /dev/ttyUSB0

Por supuesto, el nodo de dispositivos enlazados / ... contiene mucha información.

Agregando información basada en el comentario del OP:

El número de dispositivo sigue creciendo si se eliminan / insertan dispositivos. lsusb -t se puede usar para correlacionar los números de dispositivo con el bus / puerto usb.

Luego, ''lsusb -d devID'' puede determinar qué dispositivo está en qué puerto. Finalmente, ''ls / sys / bus / usb-serial / devices / -ltrah'' listará (por bus / puerto) donde se montó.

No es muy conveniente, pero '' funciona ''


Esta regla de udev de una sola línea proporcionará un nombre fijo (por ejemplo, / dev / ttyUSB_A9YL5BJJ) basado en el número de serie para cualquier dispositivo con ID de proveedor / producto como se indica.

Ponga esto en un archivo de reglas de udev, por ejemplo, /etc/udev/rules.d/60-ftdi-serial-names.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ENV{ID_SERIAL_SHORT}=="?*", SYMLINK+="ttyUSB_%E{ID_SERIAL_SHORT}"


Puede usar udev para asignar un enlace simbólico estable a cada dongle FTDI. Use el dispositivo y el proveedor para que coincida con el tipo y luego el número de serie para el dispositivo específico. Luego use el enlace simbólico en el script.

Nombré a mis dongles ttyFTDI0, etc., y escribí los números en los dongles con un marcador:

$ cat /etc/udev/ftdi.rules SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDEN97D", SYMLINK+="ttyFTDI0" SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600b30P", SYMLINK+="ttyFTDI1" SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600bexU", SYMLINK+="ttyFTDI2" SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMSA54", SYMLINK+="ttyFTDI3" SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMUW4A", SYMLINK+="ttyFTDI4"