1

在阅读了串口、虚拟串口等之后,我需要一些建议来看看这是否可能。我在 Linux 机器(运行 Ubuntu)上设置了两个串行端口。我想将两个串行端口一起路由。这甚至可能吗?

这两个串口是通过 /etc/init/ttyXXX.conf getty 脚本自动启动的。我希望这样当第一个串口接收到一个字符时,它会立即将该字符输出到第二个串口,反之亦然。

有什么简单的方法可以通过程序或 bash 脚本来做到这一点?

这个想法是两个串行端口都应该能够使用命令访问 linux 机器。但是,无论您连接到哪个端口,都能看到命令的输出会很好。例如,如果以 root 身份登录的端口 1 发送“echo testing”,我希望端口 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

可以使用交叉电缆将两个串行端口相互连接(以便一个端口的输入连接到另一个端口的输出)。

假设您的端口已正确配置(已安装和加载驱动程序)并且您的交叉电缆已连接在您的端口之间,您可以在两个终端中键入以下命令:

终端1:监听输出端口

$ tail -f /dev/ttyXXX

终端2:写入输入端口

$ echo "Hello!" > /dev/ttyYYY

如果两个端口正确连接,则消息“Hello!” 将显示在终端 1。

最难的部分往往是知道哪个硬件端口对应哪个设备文件。

于 2012-08-01T12:56:04.530 回答
1

如果你只想连接两个串口,你可以使用

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. 将该输入传递给shell
  4. 将 shell 命令的输出写回两个串口
于 2012-08-01T22:54:56.677 回答