socat è uno strumento per connettere (quasi) tutto a (quasi) tutto e tee può duplicare i flussi.
Nel tuo caso d'uso potresti connettere la tua porta seriale /dev/ttyS0
a un PTY /tmp/ttyV0
, quindi indirizza la tua applicazione al PTY e ottieni socat tee
out Input e Output da qualche parte affinché tu possa osservarli.
Cercare su Google "socat serial port pty tee debug" ti indirizzerà a diversi esempi di "procedura standard", uno dei quali è:
socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
I file in.txt
e out.txt
conterrà quindi i dati acquisiti.
Aggiornato dopo i commenti:
- La sintassi di socat all'inizio sembra confusa, ma in realtà si tratta solo di 2 istruzioni nidificate.
Un piccolo prezzo da pagare per uno strumento così potente e versatile. - Se devi configurare la tua porta seriale o inviare altri ioctl, fallo prima di chiamare socat, poiché socat non può inoltrarli.
- Lo strumento monouso
interceptty
dal 2006 ha una sintassi leggermente più semplice, ma può solo intercettare TTY (durante il proxy ioctls) e probabilmente non è nel tuo gestore di pacchetti. (La maggior parte delle distribuzioni Linux non l'ha mai aggiunto ai propri repository)
Non credo che il driver seriale abbia alcuna funzionalità di tracciamento che ti consenta di guardare i pacchetti. Puoi usare strace
per osservare tutte le letture e le scritture dalla tua applicazione:
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
Ho trovato progetti chiamati Linux Serial Sniffer, jpnevulator e Moni. I primi due sembrano fare esattamente quello che vuoi. L'ultimo si autodefinisce monitor, ma in realtà sembra un normale programma di comunicazione seriale.