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

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

テスト中のデバイス(DUT)があり、以下を使用します。パワーアナライザデータロガーのデータを使用します/dev/ttyUSB0

問題は、DUTがデータを収集するために使用するワークステーションから離れていますが、同じネットワーク内でUSB経由でパワーアナライザに直接接続されている2番目のPCを使用する必要があることです。 USBプロキシおよび「プロキシ」システムへのSSH接続USB測定システムへのシンボリックリンクを作成します。

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

上の図では、最初のPCからストリームを読み取るプログラムが違いを認識しないように、最初のPCが直接接続されている/dev/ttyUSB02番目のPCにどのようにアクセスしますか

答え1

socatここで働くこともできます。

2番目のPCでは、socatデータをリッスンし/dev/ttyUSB0てそれをTCPポートに供給できます。たとえば、次のようになります。

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

その後、最初のPCでsocatを使用して2番目のPCに接続し、疑似端末のアプリケーションにデータを提供できます/dev/ttyVUSB0

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

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

答え2

ser2netとを組み合わせて使用​​できますsocat。たとえば、シリアルポートを介してRaspberry Piに接続されたロボットがあります。 Raspberry Piは私のローカルネットワーク(2台目のコンピュータ)に接続されています。私のラップトップは同じローカルネットワーク(最初のコンピュータと同じ)に接続されています。次に、ser2netを使用して2番目のPCでTCPを介してシリアルポートを転送し、socat最初のPCで使用されるプロキシシリアルデバイスファイルを作成しました。

この設定はあなたにも適しています。提案されたソリューション:

ステップ1:2台目のPCにser2netパッケージをインストールします(下の画像を参照)。

sudo apt-get install ser2net

ser2netはTCPポートでリッスンし、TCPポートを介してシリアルポート間でデータを転送できます。設定ファイルを使用して「プロキシ」を生成するシリアルポートを設定できます/etc/ser2net.conf

ステップ2:2台目のPCでser2netを設定する

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

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

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

ser2net

または(すでに実行している場合は、次のように再起動してください)

/etc/init.d/ser2net restart

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

ステップ3:データ収集ワークステーション(最初のPC)にプロキシシリアルデバイスファイルを設定する

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

socat最後に、tcpポートを受信する最初のPCの端末にプロキシシリアルポートを作成します。

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

この例では、(またはip=<2nd-PC-IP-address>2台目のコンピュータで設定したときに選択したport=3333項目)です。/etc/ser2net.conf

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

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

このブログ記事では、この設定に関する追加情報も提供します。http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/

答え3

シンボリックリンクを使用するLinuxカーネルで/dev/バス/usb/BUS_ID/DEV_ID到着/dev/char/基本:補助 ソカット不適切なIOCTLエラーのため、そのデバイスを開けません!
したがって、この方法はUSBデバイスでは直接動作しないようです。

頑張ったうーんこれはより近い実装ですが、古いカーネルでのみサポートされています。

私の解決策はPCSC-liteを介して接続されたカードリーダーに関するものなので、環境変数を使用するより良い解決策があります。libpcsclite顧客。

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

これにより、別のUnixドメインソケットを指定できます。以下を使用して、リモートホストのリーダーソケットに転送できます。ソカット:

カードリーダーを交換するには、ホストシステムでこのコマンドを実行します。

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

関連情報