socat est un outil pour connecter (presque) tout à (presque) tout, et tee peut dupliquer des flux.
Dans votre cas d'utilisation, vous pouvez connecter votre port série /dev/ttyS0
vers un PTY /tmp/ttyV0
, puis faites pointer votre application vers le PTY et ayez socat tee
sortez l'entrée et la sortie quelque part pour que vous puissiez les observer.
Googler "socat serial port pty tee debug" vous indiquera plusieurs exemples de "procédure standard", l'un étant :
socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
Les fichiers in.txt
et out.txt
contiendra alors les données capturées.
Mis à jour après les commentaires :
- La syntaxe socat semble déroutante au premier abord, mais en fait, ce ne sont que 2 instructions imbriquées.
Un petit prix à payer pour un outil aussi puissant et polyvalent. - Si vous devez configurer votre port série ou envoyer d'autres ioctls, faites-le avant d'appeler socat, car socat ne peut pas les proxy.
- L'outil à usage unique
interceptty
à partir de 2006 a une syntaxe légèrement plus simple, mais ne peut intercepter que les TTY (lors du proxy ioctls), et n'est probablement pas dans votre gestionnaire de paquets. (La plupart des distributions Linux ne l'ont jamais ajouté à leurs repos)
Je ne pense pas que le pilote série dispose d'une fonctionnalité de traçage qui vous permettrait de surveiller les paquets. Vous pouvez utiliser strace
pour observer toutes les lectures et écritures de votre application :
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
J'ai trouvé des projets appelés Linux Serial Sniffer, jpnevulator et Moni. Les deux premiers semblent faire exactement ce que vous voulez. Le dernier s'appelle un moniteur, mais il ressemble en fait à un programme de communication série standard.