2012-08-01 127 views
0

在閱讀了關於串行端口,虛擬串行端口等之後,我需要一些建議來查看這是否可能。我在Linux機器上設置了兩個串口(運行Ubuntu)。我想將兩個串行端口連接在一起。這甚至有可能嗎?在Linux中的串行端口路由

兩個串行端口通過/etc/init/ttyXXX.conf getty腳本自動啓動。我希望它能夠在第一個串口接收到一個字符時,將它直接輸出到第二個串口,反之亦然。

任何通過程序或bash腳本執行此操作的簡單方法?

這個想法是,兩個串口應該能夠通過命令訪問linux機器。但是,不管您連接的是哪個端口,都能夠看到命令的輸出結果。例如,如果端口1以root登錄,發送「回聲測試」,我希望端口2查看輸出,但也能夠看到端口1發送了命令。

由於

+0

這是什麼你正試圖*最終達到*? – 2012-08-01 12:41:48

+0

那麼,我原來的嵌入式設計是通過一個微控制器連接兩個串行端口,但我忘記了電路上的電平轉換器。但是,我的Beagleboard xM上有一個備用的USB串行電纜,它也有一個內置的串行端口。這個想法是能夠通過這兩個端口發送命令到Linux盒子(在這種情況下是Beagleboard),並允許另一個端口看到端口發送了什麼命令。 – jliu83 2012-08-01 12:58:20

回答

3

像這樣的一個小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); 
} 
+0

嗯..這是真的。沒想過這個。這種設備會永遠拋棄任何命令。 – jliu83 2012-08-01 13:06:09

+0

其實你的想法是可行的,因爲命令只會打印到第二個串口,而不會被執行。謝謝。 – jliu83 2012-08-01 13:09:13

0

是可能的相互之間的兩個串行端口連接,具有交叉線(使得一個端口的輸入被連接到其它端口的輸出)。

假設你端口配置是否正確(安裝的驅動程序和加載),並且您的交叉電纜連接的端口之間,則可以在兩個終端輸入下面的命令:

端子1:收聽所述輸出端口

$ tail -f /dev/ttyXXX 

端子2:寫輸入端口

$ echo "Hello!" > /dev/ttyYYY 

如果兩個端口連接正確,所述消息「你好!」將在終端1中顯示。

最難的部分是知道哪個硬件端口對應哪個設備文件。

+0

我想要在內部完成連接,而不是在物理上完成。我想知道這是否可能。 – jliu83 2012-08-01 13:12:11

0

如果你只是想連接兩個串行端口,你可以使用

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等到港口之一有一定的輸入您
  3. 傳遞輸入對外殼
  4. 編寫shell命令的輸出反饋到兩個串行端口