web-dev-qa-db-ja.com

Linuxのシリアルポートでデータを監視するにはどうすればよいですか?

シリアルデバイスとの通信をデバッグしています。双方向に流れるすべてのデータを確認する必要があります。

これは、シリアルポートがファイルで表されるLinuxでは簡単なはずです。データをファイルにコピーし、実際のシリアルポートデバイスとの間でシャッフルするパイプに接続するようにプログラムに指示する、ある種の「双方向T字」を実行できる方法はありますか?

私はそのような獣の書き方を知っていると思うかもしれませんが、特にポート構成などのためにすべてのioctlを通過させるのは簡単ではないようです。

誰かがすでにそのようなものを作ったことがありますか? (シリアルデバイスドライバーをデバッグする人にとって)あまりにも便利ではないようです。

25
divegeek

strace はこれに非常に役立ちます。すべてのioctl呼び出しを視覚化し、対応する構造をデコードします。次のオプションは、あなたの場合に特に便利です:

-e read = set

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

-e write = set

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

21
shodanex

私は pyserial がかなり使いやすいことがわかったので、Pythonそのようなことを書くことはそれほど難しくないはずです。

4
balpha

簡単な方法は、ptyとテスト中のttyのマスター側を開くアプリケーションを作成することです。次に、ttyアプリケーションを「ttyデバイス」としてptyのスレーブ側に渡します。

Ptyマスターで tcgetattr() を使用してpty属性を監視し、実際のttyで tcsetattr() を呼び出す必要があります。属性が変更されました。

残りは、単純な select() で、fdがデータを双方向にコピーし、それをログにコピーします。

2
codeDr

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

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

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

1
MBR