2009-06-02 8 views
22

私はシリアルデバイスとの通信をデバッグしています。両方向に流れるすべてのデータを見る必要があります。Linuxのシリアルポート上のデータを監視するにはどうすればよいですか?

これはシリアルポートがファイルによって表されるLinuxでは、上で簡単にする必要がありますように思えます。ある種の "双方向ティー"を行う方法がありますか?データをファイルにコピーして実際のシリアルポートデバイスとの間でシャッフルするパイプに接続するようプログラムに指示しますか?

など、私は私も、このような獣を書く方法を知っているかもしれないと思うが、特にポートの設定のために通過したのioctlのすべてを取得するには、非自明なようだ

は、誰もがすでにそのようなことを築いてきました?あまりにも(シリアルデバイスドライバをデバッグする人々のために)あまり役に立たないようです。

+6

これはどうしてやったのですか? – detly

+1

これまでstraceを使用する方法を理解することができなかったので、私も知りたいと思っています。乾杯! – mac

+1

これは、与えられた答えで苦労した人にとって興味深いかもしれません。http://unix.stackexchange.com/questions/12359/how-can-i-monitor-serial-port-traffic – geekboyUK

答えて

18

straceは、このために非常に便利です。すべてのioctl呼び出しを可視化し、対応する構造をデコードします。次のオプションをお使いの場合には特に便利そうです:

=読み-e

を設定 指定されたセットに記載されている ファイルディスクリプタから読み込むすべてのデータの完全な16進数とASCIIダンプを実行します。たとえば、すべてのファイル記述子の入力アクティビティが であることを確認するには、3 と5 -e read = 3,5を使用します。 トレース-Eオプションにより 制御されるリード(2)システムコールの通常のトレース からこの が独立であることに留意されたい=読み取ります。

=が

を設定し-e書き込みは、指定された セットに記載されている 記述子をファイルに書き込まれるすべてのデータの完全な16進数とASCII ダンプを実行します。たとえば、ファイルディスクリプタ3と5のすべての出力を表示するには、 -e write = 3,5を使用します。この=書き込み トレース-eオプションによって制御 ある書き込み(2)システムコールの通常の追跡から独立 であることに留意されたいです。

+0

完璧、ありがとう!私はこれを行う簡単な方法がなければならないことを知っていました。私はいつもstraceを使用していますが、これについても考慮していませんでした。 – divegeek

+4

これは素晴らしいですね。しかし、私は疑問に思う:どのように関連するファイル記述子番号が何であるか把握することができますか? –

3

私はかなり使えるようにpyserialを発見したので、あなたは、Pythonに興味があれば、そのようなことを書くのはあまりにも難しいことではありません。

2

簡単な方法は、 を開いて、テスト中のttyのマスター側にアプリケーションを書き込むことです。 あなたのttyアプリケーションをptyのスレーブ側に 'ttyデバイス'として渡します。

pty マスタでtcgetattr()のpty属性を監視し、属性が変更された場合は実際のttyのtcsetattr()をコールする必要があります。

残りはfdの両方のデータを双方向でコピーしてログにコピーすると、簡単なselect()になります。

+0

'tcsetattr()'で行われた変更のイベントをどのように監視することができますか?彼らは '選択 'を聞いて報告されるだろうか? – dolmen

+0

ttyドライバ(とos)は、入出力のselect()レスポンスでのみ契約しています。最も簡単なのは、入出力を処理する前に、select呼び出しが成功した後にtcgetattr()を呼び出すことです。 – codeDr

1

私は多くのシリアルスニファを見ました。それらのすべては、仮想シリアルポートを作成し、そのポートからデータをスニッフィングするという考えに基づいています。ただし、ボー/パリティ/フローの変更によって接続が切断されます。

だから、私は自分のスニファを書きました:)。ほとんどのシリアルポートは、USB-to-serialコンバータだけです。私のスニッファは、USBからdebugfsを通してデータを収集し、解析してコンソールに出力します。また、ボーレートの変更、フロー制御、回線イベント、シリアルエラーも記録されます。プロジェクトは開発の初期段階にあり、現在はFTDIのみがサポートされています。

http://code.google.com/p/uscmon/

+0

これは面白そうです。任意のvid/pidを使用するように更新でき、どこを変更することができれば素晴らしいだろうか? – not2qubit

+0

がメイクファイルを持っていればいいです – nhed

+0

別の場所はここにあります(https://github.com/after5cst/uscmon)。問題のディスカッションには役立ちますが、実際に作業をしていないようです。@MBRあなたはアップデートされたバージョンを持っていますか?またはドキュメンテーション? – nhed

関連する問題