OK、私は何時間もグーグルをしているので、明らかにこの主題についてすでに尋ねられているさまざまな質問への答えを理解することができませんでした。もっと具体的に質問することで、理解できる答えが得られることを願っています。
シリアルポートに接続された外部デバイスと通信するアプリケーションをLinuxで実行しています。ファイルの各行の先頭にタイムスタンプを付けて、アプリケーションとデバイスの間で双方向に送信されたデータをキャプチャしてログに記録できるようにしたい。
テストケースとして、監視したいアプリケーションとしてminicomを使用しており、ヌルモデムケーブルを介して、同じくminicomを実行している別のコンピューターに接続しています。どちらかのコンピューターで文字を入力すると、もう一方のコンピューターの端末に文字が表示されることを確認しました。ここまでは順調ですね。
それから私はこの質問を見つけました:
シリアルポートトラフィックを監視するにはどうすればよいですか?
この質問への回答では、プログラムjpnevulatorが提案されています。しかし、manページを確認したところ、jpnevulatorを使用して必要なものを取得する正しい方法がわかりませんでした。これが私がやろうとしたことです:
まず、ターミナルウィンドウを開き、次のコマンドを入力しました。
$jpnevulator --tty=/dev/ttyS0 --pty --pass --read --ascii --timing-print --file=serial.log
出力を見ました:jpnevulator:スレーブptsデバイスは/ dev/pts/18です
次に、別のターミナルウィンドウを開き、次のコマンドを入力しました。
minicom -D/dev/pts/18 -b115200
ミニコムは文句なしにオープンしました。
ただし、どちらかの端末(ローカルとリモート)に文字を入力すると、どちらの端末にも何も表示されませんでした。 jpnevulatorは、/ dev/pts/18に書き込まれたデータのみをログに記録しました。
私の期待はそのjpnevulatorです:
/ dev/pts/18からデータを読み取り、このデータを/ dev/ttyS0に「渡し」、同時にこのデータを指定されたファイルに書き込みます。
/ dev/ttyS0からデータを読み取り、このデータを/ dev/pts/18に「渡し」、同時にこのデータを指定されたファイルに書き込みます。
よくある質問の中で、「Jpnevulatorはカーネルとアプリケーションの間に位置するように構築されたことはありません。ごめんなさい」という発言を知っています。
ただし、2番目の段落でまったく同じFAQが述べています。「少し運が良ければ、いくつかの良いニュースがあります。少し前に、Eric Shattowは、疑似端末デバイスを使用してカーネルとアプリケーションの間に配置することを提案しました。」それが私がとろうとしているアプローチですが、私は成功していません。何が足りないのですか?
よろしくお願いします。
乾杯、アラン
p.s.私が参照した既存の質問で言及されたsocatメソッドを使用して、前後のトラフィックを正常にキャプチャできましたが、このメソッドはトラフィックにタイムスタンプを付ける方法を提供しませんでした。 jpnevulatorがこれを提供してくれることを期待していました。
私は自分の質問に答えました:私は私が欲しいものをよりよく提供する別のユーティリティを見つけました:
https://github.com/geoffmeyers/interceptty
このパッケージには、インターセプトの出力を後処理して「きれいな」出力を提供するPerlスクリプトが含まれています。スクリプトを変更して各行にタイムスタンプを追加するのは非常に簡単であることがわかりました。
これを提供してくれたGeoffMeyersに感謝します。
アラン