私はCP2102シリアルコンバータチップに送受信される内容の16進ダンプを取得しようとしました。人々が監視するケースを見つけることができます。ハードウェアシリアルポート/dev/TTYS0など
socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyUSB1,raw,echo=0
このようなUSBポートを監視する方法を教えてくれるリソースを知っている人はいますか?これまで何も効かなかった。たぶん、シリアルモニタリングや他のものの再ルーティングの側面を理解していないかもしれません。
答え1
最も簡単な方法は、可能であれば16進数を解放するようにソフトウェアを調整することです。ほとんどのソフトウェアにはすでに対応sdio.h
するエントリ(またはそれに対応するエントリ)があり、16進シリアルデータにはprintf
シリアルファイル記述子に入って来るデータへの呼び出し(またはそれに対応するエントリ)のみが必要です。データを送受信する複雑な追加プロセスはなく、事実上追加の待ち時間もありません。
緊急の場合strace
(sysdig
SystemTap
など)を使用して通信を記録することができますが、これによりstrace
プロセスが大幅に遅くなり、出力に後処理が必要になる可能性があります。適していません。
strace -xx -y -e trace=read,write -p $pid_of_your_program_here
ハードウェアレベルでは、バスの違法コピーや同様の行為が通信を悪用する別の方法になる可能性があります。
これまでsocat(1)
便利な16進オプションがあるようです-x
。
-x Writes the transferred data not only to their target streams,
but also to stderr. The output format is hexadecimal, prefixed
with "> " or "< " indicating flow directions. Can be combined
with -v .
いくつかの実験の後、私はランダムなArduinoを聞くことができました。
socat -x PTY,link=/dev/blah,raw,wait-slave /dev/serial/by-id/usb-Arduino...
その後、ソフトウェアを開くことができます/dev/blah
(またはソフトウェアを実行して実行できますかEXEC
?)。パスを設定しようとするとエラーが発生するため、パスのraw
後にオプションは指定されません。出力には次の事後処理が必要な場合があります。/dev/serial/by-id/usb-Arduino...
tcgetattr(6, ...): Inappropriate ioctl for device
socat
socat
--
2017/10/09 16:32:20 socat[30806] I transferred 1 bytes from 6 to 5
< 2017/10/09 16:32:20.475916 length=31 from=2042 to=2072
52 65 71 75 65 73 74 69 6e 67 20 74 65 6d 70 65 Requesting tempe
72 61 74 75 72 65 73 2e 2e 2e 44 4f 4e 45 0a ratures...DONE.
--