1

シリアルポートや仮想シリアルポートなどについて読んだ後、これが可能かどうかを確認するために少しアドバイスが必要です。Linuxマシン(Ubuntuを実行している)に2つのシリアルポートを設定しました。2つのシリアルポートを一緒にルーティングしたいと思います。これも可能ですか?

2つのシリアルポートは、/ etc / init /ttyXXX.confgettyスクリプトを介して自動的に開始されます。最初のシリアルポートが文字を受信すると、その文字をすぐに2番目のシリアルポートに出力し、その逆もできるようにしたいと思います。

プログラムまたはbashスクリプトを介してこれを行う簡単な方法はありますか?

アイデアは、両方のシリアルポートがコマンドを使用してLinuxマシンにアクセスできる必要があるということです。ただし、接続しているポートに関係なく、コマンドの出力を確認できると便利です。たとえば、rootとしてログオンしているポート1が「エコーテスト」を送信した場合、ポート2に出力を表示したいのですが、ポート1がコマンドを送信したことも確認できます。

ありがとう

4

3 に答える 3

4

このような小さな Perl スクリプトは、あなたが何を求めているのかよくわかりませんが、あなたが望んでいることをするかもしれません。双方向の場合、同じキャラクターを前後に送り続けると思うので、片道しか進んでいません. また、上部にあるポート パスを自分のものに変更する必要がある場合もあります。

または同様に保存し、serial.pl実行可能にして実行します。

#!/usr/bin/perl

use strict;
use warnings;

use Device::SerialPort;

my $port1_path = '/dev/tty1';
my $port2_path = '/dev/tty2';

my $port1 = Device::SerialPort->new($port1_path);
$port1->databits(8);
$port1->baudrate(19200);
$port1->parity("none");
$port1->stopbits(1);

my $port2 = Device::SerialPort->new($port2_path);
$port2->databits(8);
$port2->baudrate(19200);
$port2->parity("none");
$port2->stopbits(1);

while ($in = $port1->input) {
    $port2->write($in);
}
于 2012-08-01T13:01:03.113 に答える
1

クロスオーバー ケーブルを使用して、2 つのシリアル ポートを相互に接続することができます (一方のポートの入力が他方のポートの出力に接続されるように)。

ポートが正しく構成されており (ドライバーがインストールされロードされている)、クロスオーバー ケーブルがポート間で接続されていると仮定すると、2 つのターミナルで次のコマンドを入力できます。

ターミナル 1: 出力ポートでリッスン

$ tail -f /dev/ttyXXX

端子 2: 入力ポートへの書き込み

$ echo "Hello!" > /dev/ttyYYY

2 つのポートが正しく接続されている場合、「Hello!」というメッセージが表示されます。ターミナル1に表示されます。

多くの場合、最も難しいのは、どのハードウェア ポートがどのデバイス ファイルに対応しているかを知ることです。

于 2012-08-01T12:56:04.530 に答える
1

2つのシリアルポートを接続したいだけなら、次を使用できます

socat /dev/ttyS0,raw,echo=0,crnl /dev/ttyS1,raw,echo=0,crnl

( http://technostuff.blogspot.com/2008/10/some-useful-socat-commands.htmlを参照)

しかし、コマンド インタープリタとやり取りしたいので、次のような Perl スクリプトを作成する必要があると思います。

  1. 両方のシリアル ポートを開く
  2. selectポートの 1 つに何らかの入力があるまで待機するために使用します
  3. その入力をシェルに渡します
  4. シェル コマンドの出力を両方のシリアル ポートに書き戻します。
于 2012-08-01T22:54:56.677 に答える