充電コントローラー用のいくつかのソフトウェアを開発しようとしていますが、それを使用できる唯一のデバイスは、Raspberry Piです(PCを階下に配置したくないため)とにかく、リモートデバイスの/ dev/ttyUSBXを介して通信します。
ローカルマシンに仮想シリアルポートを作成し、SSH経由で接続できることを望んでいました。できれば、暗号化されていない状態でも問題ありません。また、それがデーモンである可能性がある場合も、完全なパススルーのように機能するように、Niceになります。
Socatとser2netを調べましたが、データが渡されなかったか、1つのコマンドが送信された後にsocatが終了しました。チュートリアルも探しましたが、通常はクライアントではなくリモートの例を示しています。したがって、サーバーとクライアントの例を挙げていただければ幸いです。
「仮想シリアルポート」はWindowsの用語です。 Linuxには「仮想シリアルポート」がありません。
Linuxには、追加のioctl
sをサポートするファイルがあります。それらが必要ない場合は、socat
などのツールを使用してリダイレクトを試すことができます。
それらが必要な場合、私は解決策を知りません。ただし、できることは、USBデバイスをネットワーク経由で透過的に転送することです。 sbip 。ほとんどのLinuxディストリビューションには、パッケージとしてusbipが含まれています。
したがって、リモートデバイスのUSBシリアルポートをローカルUSBデバイスとして扱い、ローカルデバイスの/dev/ttyUSBX
にアクセスします。
これにより、DTR、RTSなどの操作を表すUSBパケットも両方向に転送されます。
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
を使用するようにコマンドを適応させる必要があることは明らかですが、他のすべては逐語的である可能性があります。