ネットワーク経由で/ dev / ttyUSB0の「USBプロキシ」を設定するにはどうすればよいですか?


14

テスト対象のデバイス(DUT)があり、からのデータを使用してPower Analyzer Dataloggerを使用して電力使用量を測定し/dev/ttyUSB0ます。

問題は、データを収集するために使用したワークステーションからDUTがリモートになりましたが、同じネットワーク内で、USB経由でPower AnlayzerにUSBプロキシおよびsshとして直接接続された2台目のPCを使用する必要があることです「プロキシ」マシンのUSBの測定マシンに一種のシンボリックリンクを作成します。

ここに画像の説明を入力してください

どのように1回のすることができます上記の図を考えるとST PCアクセス/dev/ttyUSB02のND直接接続されたPC、プログラムは1からストリームを読み込むような方法でST PC違いに気付くことはありませんか?

回答:


19

socat ここで動作する可能性があります。

2番目のPCではsocat、データをリッスンし/dev/ttyUSB0て、tcpポートに提供することができます。例:

socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr

次に、1台目のPCでsocatを使用して2台目のPCに接続し/dev/ttyVUSB0、アプリケーションの擬似端末でデータを提供できます。

socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888

これはテストされておらず、socat多くのオプションをサポートしているため、微調整が必​​要になる場合があります。


3
ありがとう!ラップトップのドッカーコンテナのテスト環境-> SSHトンネル->クリーンルームのPC-​​>クリーンルームのAVRプログラマーとFTDIロガー
マークKコーワン

2

ser2netとの組み合わせを使用できますsocat。たとえば、シリアルポートを介してラズベリーパイにロボットを接続しています。raspberry piはローカルネットワーク(2台目のPCに相当)に接続されています。そして、私のラップトップは同じローカルネットワーク(最初のPCと同等)に接続されています。次に、2台目のPCからTCP経由でser2netを使用してシリアルポートを転送socatし、1台目のPCでプロキシシリアルデバイスファイルを作成します。

このセットアップも同様に機能する場合があります。提案されたソリューション:

ステップ1:2番目のPCにser2netパッケージをインストールします(図に従って)

sudo apt-get install ser2net

ser2netはTCPポートをリッスンし、TCPポートを介してシリアルポートとの間でデータをパイプすることができます。構成ファイルを介して、「プロキシ」を作成するシリアルポートを設定できます/etc/ser2net.conf

ステップ2:2台目のPCでser2netを構成する

たとえば、/dev/ttyACM0ボーレートで接続されたデバイスがあり、115200ローカルホストのポート3333から提供する場合、次の行を追加できます。/etc/ser2net.conf

3333:raw:0:/dev/ttyACM0:115200,remctl

構成ファイルを作成したら、2番目のPCで実行してser2netを開始します。

ser2net

または(既に実行されている場合は、以下のように再起動します)

/etc/init.d/ser2net restart

ここで重要なことの1つは、remctlオプションです。これにより、クライアント側(図の最初のPC)がデバイスに接続し、シリアル接続オプションを自由に選択できます。このように、シリアル通信はデータ収集ワークスペースの観点から完全に透過的だと思います。詳細はこちらご覧ください

手順3:データ収集ワークステーション(1台目のPC)でプロキシシリアルデバイスファイルをセットアップする

(socatがない場合は、sudo apt-get install socat

最後に、最初のPCのターミナルでsocat、tcpポートからリッスンするプロキシシリアルポートを作成します。

socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive

ここで、この例ip=<2nd-PC-IP-address>ではport=3333(または/etc/ser2net.conf2台目のPCでセットアップするときに選択したもの)。

ステップ4:MyProxySerialPortに接続する

これ$HOME/MyProxySerialPortで、最初のPC にあるデバイスへのシリアル接続を正常に開くことができるはずです。

このブログ投稿には、このセットアップに関する詳細情報もあります。http//techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/


非常に詳細な回答+1
エデュアルドフロリネスク

1

/ dev / bus / usb / BUS_ID / DEV_IDから/ dev / char / MAJOR:MINOR へのシンボリックリンクを使用しているLinuxカーネルでは、不適切なIOCTLエラーのためにsocatはそのようなデバイスを開くことができません!
そのため、このアプローチはUSBデバイスでは直接機能しないようです。

より近い実装ですが、古いカーネルでのみサポートされているusbipを試しました。

私の解決策はpcsc-liteを介して接続されたカードリーダーに関するものであったため、libpcscliteクライアントの環境変数を使用するより良い解決策がありました。

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

このようにして、異なるUNIXドメインソケットを指定できます。そして、これはsocatを使用してリモートホストのカードリーダーソケットに転送できます:

ホストでこれを実行して、カードリーダーを交換します

socat tcp:$CARD_READER_HOST:8888 UNIX-LISTEN:$PCSCLITE_CSOCK_NAME,fork

pcscカードリーダーが接続されたCARD_READER_HOSTホストでこれを実行します

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr

1
こんにちは:)。これは興味深い情報ですが、についての質問/dev/ttyUSB0や、PCSCLITEを使用しないパワーアナライザーには関係ありません。この情報を投稿したい場合は、別の質問としてお勧めします。すぐに回答が得られるトピックに関する質問を投稿することは許可され、奨励されています。
sourcejedi

3
私はそれを試しましたが、関連する情報は、提案された回答が機能しなかったことです!この情報には共有が必要だと思います。残りは本当に直接関係ありませんが、関連する問題に対して異なるアプローチを提供します。
UV

これ:は、パス内のキャラクターが原因でしょうか?socatのmanページのセクション「ADDRESS SPECIFICATIONS」には、文字をエスケープする方法に関するパラグラフがあります(v1.5.0以降)。
デビッドクニペ

興味深い点ですが、プロジェクトは缶詰になっているため、もう確認する方法はありません:(
UV
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.