ポートに書き込まれたパケットを監視するためのポート監視ツールはありますか?特に、Java=で記述されたプログラムが機能するかどうかを確認したいので、小さなアプリケーションがメッセージをポートに書き込んでいるかどうかを確認するためのツールが必要です。どうすればよいですか?
Linux Serial Sniffer 、 jpnevulator 、および Moni というプロジェクトが見つかりました。最初の2つは、期待どおりの動作をするように見えます。最後のものはそれ自体をモニターと呼びますが、実際には標準のシリアル通信プログラムのように見えます。
socat は(ほぼ)すべてを(ほぼ)すべてに接続するツールであり、 tee はストリームを複製できます。
ユースケースでは、シリアルポートを接続できます/dev/ttyS0
からPTYへ/tmp/ttyV0
、次にアプリケーションにPTYを指定し、どこかにsocat tee
out入力と出力を確認してもらいます。
「socat serial port pty tee debug」をグーグルすると、いくつかの例が示されます。
socat /dev/ttyS0,raw,echo=0 \
SYSTEM:'tee in.txt |socat - "PTY,link=/tmp/ttyV0,raw,echo=0,waitslave" |tee out.txt'
ファイル in.txt
およびout.txt
には、キャプチャされたデータが含まれます。
これはコメンター(@ogurets)によって動作することが確認されています。
シリアルドライバーには、パケットを監視できるトレース機能はないと思います。 strace
を使用して、アプリケーションからのすべての読み取りと書き込みを監視できます。
strace -s9999 -o myapp.strace -eread,write,ioctl ./myapp
おかげで ギレスの答え !
strace -s 9999 -e read -ffp $(sed '/ttyUSB0/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d' <(ls -l /proc/[1-9]*/fd/* 2>/dev/null)) 2>&1 | Perl -e '$|=1;my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);sub cnv { my $ch=$_[0];$ch=$qa[$1] if $ch=~/([abefnrt])/;return chr(oct($ch)); };while (<>) { /^read.\d+,\s+"(.*)",\s\d+.*$/ && do { $_=$1;s/\\(\d+|[abefnrt])/cnv($1)/eg;print; };};'
説明します...
#!/bin/bash
strace -s 9999 -e read -ffp $(
sed "/tty${1:-USB0}/s/^.*proc.\([0-9]\+\).fd.*/\1/p;d" <(
ls -l /proc/[1-9]*/fd/* 2>/dev/null
)
) 2>&1 |
Perl -e '
$|=1;
my %qa=('a'=>7,'b'=>10,'e'=>33,'f'=>14,'n'=>12,'r'=>15,'t'=>11);
sub cnv {
my $ch=$_[0];
$ch=$qa[$1] if $ch=~/([abefnrt])/;
return chr(oct($ch));
};
while (<>) {
/^read.\d+,\s+"(.*)",\s\d+.*$/ && do {
$_=$1;
s/\\(\d+|[abefnrt])/cnv($1)/eg;
print;
};
};
'
ls -l /proc/[0-9]*/fd/* | grep ttyUSB0
ではなくlsof ttyUSB0
を使用しています。ttyUSB0
を使用して現在のプログラムをトレースしますtty${1:-USB0}
は、スクリプトまたは関数として使用して、シリアルデバイス名を引数として実行することを許可します:ttySniff USB0
またはttySniff S0
など。strace -s 9999
によってログに記録されるunbackslash
文字列です。strace -e read
をstrace -e read,write
またはstrace -e write
に置き換えることができます。注:構文を使用して実行します:
script -t ttySniff.log 2>ttySniff.tm -c "./ttySniff.sh USB0"
そのため、操作全体を再生し、タイミング実行をトレースできました。
interceptty
その仕事をします:
interceptty /dev/ttyACM0 /dev/ttyDUMMY
または、Nice出力形式とバックエンドデバイスの構成、およびラインバッファリングを使用します。
interceptty -s 'ispeed 19200 ospeed 19200' -l /dev/ttyACM0 /dev/ttyDUMMY | interceptty-nicedump
次に、プログラムを使用して/dev/ttyDUMMY
に接続します。
アプリケーションとシリアルポートの相互作用をデバッグするときは、 moserial を使用します。
これを試して:
screen /dev/tty.usbserial-blahblah 9600
私のために働く。
シリアルポートを監視するツールのリストにminicom
がありません。たとえば、arduinoデバイスを聞くために使用します。
minicom --device /dev/ttyACM0 --baud 9600
ttyUSBSpy をご覧ください。アルファ段階ですが、動作します。
私は Wireshark を使用します。 完全なハウツーガイドがここにあります および ここにUSBフィルターリファレンス があります。