versiones ver serie serial puertos puerto probar para leer comando com1 abiertos linux monitoring serial-port

ver - terminal serie linux



¿Cómo puedo monitorear los datos en un puerto serial en Linux? (4)

He encontrado que pyserial es bastante utilizable, así que si te gusta Python, no debería ser demasiado difícil escribir una cosa así.

Estoy depurando las comunicaciones con un dispositivo serial, y necesito ver todos los datos que fluyen en ambas direcciones.

Parece que esto debería ser fácil en Linux, donde el puerto serie está representado por un archivo. ¿Hay alguna manera de que pueda hacer una especie de "tee bidireccional", donde le digo a mi programa que se conecte a una tubería que copia los datos a un archivo y también los baraja al / del dispositivo de puerto serie real?

Creo que incluso podría saber cómo escribir una bestia así, pero parece no trivial, especialmente para que todos los ioctls pasen a través de la configuración de puertos, etc.

¿Alguien ya ha construido tal cosa? Parece demasiado útil (para que las personas que depuran controladores de dispositivos serie) ya no existan.


Miré un montón de sniffers en serie. Todos ellos se basan en la idea de crear un puerto serie virtual y rastrear datos de ese puerto. Sin embargo, cualquier cambio en baudios / paridad / flujo interrumpirá la conexión.

Por lo tanto, escribí mi propio sniffer :). La mayoría de los puertos serie ahora son solo convertidores de USB a serie. Mi sniffer recopila datos desde USB a través de debugfs, los analiza y los envía a la consola. También se registran los cambios de velocidad en baudios, control de flujo, eventos de línea y errores en serie. El proyecto se encuentra en la etapa inicial de desarrollo y, por el momento, solo se admite FTDI.

http://code.google.com/p/uscmon/


Un método simple sería escribir una aplicación que abriera el lado maestro de un pty y el tty bajo prueba. Luego pasaría su aplicación tty al lado esclavo de la pty como el ''dispositivo tty''.

Tendría que monitorear los atributos pty con tcgetattr() en el maestro pty y llamar a tcgetattr() en el tty real, si los atributos cambian.

El resto sería una simple select() en ambos datos de copia bidireccional de fd y copiarlo en un registro.


strace es muy útil para esto. Tiene una visualización de todas las llamadas ioctl, con la estructura correspondiente decodificada. Las siguientes opciones parecen particularmente útiles en su caso:

-e lee = establecer

Realice un volcado completo en formato hexadecimal y ASCII de todos los datos leídos de los descriptores de archivo enumerados en el conjunto especificado. Por ejemplo, para ver toda la actividad de entrada en los descriptores de archivos 3 y 5 use -e read = 3,5. Tenga en cuenta que esto es independiente del rastreo normal de la llamada al sistema read (2) que se controla mediante la opción -e trace = read.

-e escribe = conjunto

Realice un volcado hexadecimal y ASCII completo de todos los datos escritos en los descriptores de archivos que se enumeran en el conjunto especificado. Por ejemplo, para ver toda la actividad de salida en los descriptores de archivos 3 y 5 use -e write = 3,5. Tenga en cuenta que esto es independiente del rastreo normal de la llamada al sistema write (2) que se controla mediante la opción -e trace = write.