Quiero monitorear (olfatear) el tráfico de mi /dev/ttyUSB0 que es creado por FTDI USB Serial Converter. He escrito mi propia aplicación en Windows y ahora trato de portarla a Linux y uso /dev/tty/USB0. Quiero depurar la comunicación que realmente sucede.
El software strace no es una opción para mí porque solo muestra las llamadas del sistema a ioctl.
Usando Windows, el software "Free Serial Port Monitor" lo hizo olfateando COM1.
Salida de dmesg:
[16975.000221] usb 7-1: new full-speed USB device number 5 using uhci_hcd [16975.193543] usb 7-1: New USB device found, idVendor=0403, idProduct=6001 [16975.193548] usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [16975.193552] usb 7-1: Product: FT232R USB UART [16975.193555] usb 7-1: Manufacturer: FTDI [16975.193558] usb 7-1: SerialNumber: A400BJII [16975.200550] ftdi_sio 7-1:1.0: FTDI USB Serial Device converter detected [16975.200599] usb 7-1: Detected FT232RL [16975.202604] usb 7-1: FTDI USB Serial Device converter now attached to ttyUSB0Sin embargo, probé moserial para hacer esto y el comando "echo foobar > /dev/ttyUSB0" para verificar si funciona. Además, mi software no crea una salida para moserial.
ACTUALIZAR:
Descubrí cómo monitorear usb directamente, ahora necesito convertir paquetes USB a RS-232 (lo que básicamente hace FTDI).
Configurar usb mon
1.1 Con kernels de Linux anteriores a 2.6.23, también deberá ejecutar este comando
usbmon0 monitoreará cualquier tráfico de todos los usbmon0 a usbmonX 2.1. Encuentre el dispositivo USB correcto
T: Bus=07 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 12 Spd=12 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=0403 ProdID=6001 Rev= 6.00 S: Manufacturer=FTDI S: Product=FT232R USB UART S: SerialNumber=A400BJII C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 90mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms2.2. Tenga en cuenta el número de bus del puerto (Bus = 07), por lo que usbmon para monitorear será usbmon7
2.3. Use wireshark para capturar la interfaz usbmon7 o use el siguiente comando para obtener salida a la consola (stdout) ... reemplace el número con bus-id
¿Qué significa 'u'? https://www.kernel.org/doc/Documentation/usb/usbmon.txt
Actualmente se admiten dos formatos: el original, o formato '1t', y el formato '1u'. El formato '1t' está en desuso en el kernel 2.6.21. El formato '1u' agrega algunos campos, como descriptores de fotogramas ISO, intervalo, etc. Produce líneas un poco más largas, pero por lo demás es un superconjunto perfecto del formato '1t'.
¿Cómo convierto la captura USB a captura RS-232? no lo se... TODO
Con tu pista logré resolver mi problema, así que ahí está mi pista para el último punto:
Usando Wireshark, abra usbmon0 y use este filtro
usb.capdata or at Emitir dos veces el comando echo asd > /dev/ttyUSB0 produce el siguiente resultado en Wireshark
Puede extraer todos los datos de captura sobrantes de un archivo de captura usando tshark:
tshark -r capture.pcapng -T fields -e usb.capdata