web-dev-qa-db-ja.com

リモートシリアルポートをローカルポートとして使用する

充電コントローラー用のいくつかのソフトウェアを開発しようとしていますが、それを使用できる唯一のデバイスは、Raspberry Piです(PCを階下に配置したくないため)とにかく、リモートデバイスの/ dev/ttyUSBXを介して通信します。

ローカルマシンに仮想シリアルポートを作成し、SSH経由で接続できることを望んでいました。できれば、暗号化されていない状態でも問題ありません。また、それがデーモンである可能性がある場合も、完全なパススルーのように機能するように、Niceになります。

Socatとser2netを調べましたが、データが渡されなかったか、1つのコマンドが送信された後にsocatが終了しました。チュートリアルも探しましたが、通常はクライアントではなくリモートの例を示しています。したがって、サーバーとクライアントの例を挙げていただければ幸いです。

3
Trevin Corkery

「仮想シリアルポート」はWindowsの用語です。 Linuxには「仮想シリアルポート」がありません。

Linuxには、追加のioctlsをサポートするファイルがあります。それらが必要ない場合は、socatなどのツールを使用してリダイレクトを試すことができます。

それらが必要な場合、私は解決策を知りません。ただし、できることは、USBデバイスをネットワーク経由で透過的に転送することです。 sbip 。ほとんどのLinuxディストリビューションには、パッケージとしてusbipが含まれています。

したがって、リモートデバイスのUSBシリアルポートをローカルUSBデバイスとして扱い、ローカルデバイスの/dev/ttyUSBXにアクセスします。

これにより、DTR、RTSなどの操作を表すUSBパケットも両方向に転送されます。

4
dirkt

man socatを注意深く読んだところ、次の例が明らかになりました。

socat PTY,link=$HOME/vmodem0,rawer,wait-slave \
    EXEC:"ssh modemserver.us.org socat - /dev/ttyS0,nonblock,rawer"

文書化:

- generates  a pseudo terminal device (PTY) on the client that can
be reached under the symbolic link $HOME/vmodem0.  An appli‐
cation that expects a serial line or modem can be configured to
use $HOME/vmodem0; its traffic will be directed to a  modem‐
server  via  ssh  where  another  socat  instance  links  it  to
/dev/ttyS0.

したがって、PCはsocatを実行してpty$HOME/vmodem0のリンクで割り当て、次にsshコマンドのstdin/stdoutを介してそれをチャネリングします。 socatリモートエンドでのstdin/stdoutの(リモートの)/dev/ttyS0へのstdin/stdoutの同様の(ただし反対の)チャネリング。括弧内のリンクでは、マニュアルページで$HOME/dev/vmodem0の使用を推奨していますが、便宜上、短縮しています。

modemserver.us.orgの代わりにラズベリーIPを使用し、/dev/ttyUSBXの代わりに/dev/ttyS0を使用するようにコマンドを適応させる必要があることは明らかですが、他のすべては逐語的である可能性があります。

0