socat es una herramienta para conectar (casi) todo a (casi) todo, y tee puede duplicar flujos.
En su caso de uso, podría conectar su puerto serie /dev/ttyS0
a un PTY /tmp/ttyV0
, luego dirija su aplicación al PTY y tenga socat tee
Salida de entrada y salida en algún lugar para que usted pueda observar.
Buscar en Google "socat serial port pty tee debug" le indicará varios ejemplos de "procedimiento estándar", uno de los cuales es:
socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
Los archivos in.txt
y out.txt
luego contendrá los datos capturados.
Actualizado después de los comentarios:
- La sintaxis de socat parece confusa al principio, pero de hecho, son solo 2 declaraciones anidadas.
Un pequeño precio a pagar por una herramienta tan potente y versátil. - Si necesita configurar su puerto serie o enviar otros ioctls, hágalo antes de llamar a socat, ya que socat no puede representarlos.
- La herramienta de propósito único
interceptty
a partir de 2006 tiene una sintaxis un poco más simple, pero solo puede interceptar TTY (mientras realiza un proxy de ioctl), y probablemente no esté en su administrador de paquetes. (La mayoría de las distribuciones de Linux nunca lo agregaron a sus repositorios)
No creo que el controlador serie tenga ninguna funcionalidad de seguimiento que le permita ver paquetes. Puedes usar strace
para observar todas las lecturas y escrituras de su aplicación:
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
Encontré proyectos llamados Linux Serial Sniffer, jpnevulator y Moni. Los dos primeros parecen que hacen exactamente lo que quieres. El último se hace llamar monitor, pero en realidad parece un programa estándar de comunicación en serie.