GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu sledovat provoz na sériovém portu?

socat je nástroj pro připojení (téměř) všeho k (téměř) všemu a tee může duplikovat streamy.
Ve vašem případě použití můžete připojit sériový port /dev/ttyS0 na PTY /tmp/ttyV0 , pak nasměrujte svou aplikaci na PTY a mějte socat tee ven Vstup a výstup někde, kde je můžete pozorovat.

Googlování "socat serial port pty tee debug" vás nasměruje na několik příkladů "standardního postupu", z nichž jeden je:

socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'

Soubory in.txt a out.txt bude poté obsahovat zachycená data.

Aktualizováno po komentářích:

  • Syntaxe socat vypadá zpočátku zmateně, ale ve skutečnosti jsou to jen 2 vnořené příkazy.
    Malá cena, kterou zaplatíte za tak výkonný a všestranný nástroj.
  • Pokud potřebujete nastavit sériový port nebo odeslat jiné soubory ioctl, udělejte to před voláním socat, protože je socat nemůže proxy.
  • Jednoúčelový nástroj interceptty z roku 2006 má o něco jednodušší syntaxi, ale dokáže zachytit pouze TTY (při proxy ioctls) a pravděpodobně není ve vašem správci balíčků. (Většina linuxových distribucí jej nikdy nepřidala do svých repozitářů)

Nemyslím si, že sériový ovladač má nějakou funkci sledování, která by vám umožnila sledovat pakety. Můžete použít strace sledovat všechna čtení a zápisy z vaší aplikace:

strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp

Našel jsem projekty s názvem Linux Serial Sniffer, jpnevulator a Moni. První dva vypadají, že dělají přesně to, co chcete. Poslední se nazývá monitor, ale ve skutečnosti vypadá jako standardní sériový komunikační program.


Linux
  1. Jak monitorovat sériové připojení @ 250 000 Baud?

  2. Jak zjistit, který sériový port se používá?

  3. Jak monitorovat a protokolovat síťový provoz v systému Linux pomocí vnStat

  1. Jak otevřít, číst a zapisovat ze sériového portu v C?

  2. Jak mohu zabít TCP port 16969 v Bash?

  3. Jak mohu tunelovat veškerý síťový provoz přes SSH?

  1. Jak zjistím, který /dev/ttyS* je můj sériový port?

  2. Jak kočka pozná přenosovou rychlost sériového portu?

  3. Jak mohu sledovat délku fronty přijetí?