Linux中的串口路由
在阅读了有关串行端口、虚拟串行端口等的内容后,我需要一些建议,看看这是否可行。我在Linux机器(运行Ubuntu)上设置了两个串行端口。我想把这两个串口连在一起。这可能吗 这两个串行端口通过/etc/init/ttyXXX.conf getty脚本自动启动。我希望这样,当第一个串行端口接收到一个字符时,它会将该字符直接输出到第二个串行端口,反之亦然 有什么简单的方法可以通过程序或bash脚本实现这一点吗 这两个串行端口都应该能够通过命令访问linux机器。但是,无论您连接到哪个端口,都能看到命令的输出是很好的。例如,如果以root用户身份登录的端口1发送“echo testing”,我希望端口2能够看到输出,但也能够看到端口1发送了命令Linux中的串口路由,linux,bash,ubuntu,serial-port,Linux,Bash,Ubuntu,Serial Port,在阅读了有关串行端口、虚拟串行端口等的内容后,我需要一些建议,看看这是否可行。我在Linux机器(运行Ubuntu)上设置了两个串行端口。我想把这两个串口连在一起。这可能吗 这两个串行端口通过/etc/init/ttyXXX.conf getty脚本自动启动。我希望这样,当第一个串行端口接收到一个字符时,它会将该字符直接输出到第二个串行端口,反之亦然 有什么简单的方法可以通过程序或bash脚本实现这一点吗 这两个串行端口都应该能够通过命令访问linux机器。但是,无论您连接到哪个端口,都能看到命
多亏了可以使用交叉电缆将两个串行端口相互连接(这样一个端口的输入连接到另一个端口的输出) 假设端口配置正确(已安装和加载驱动程序),并且跨接电缆连接在端口之间,则可以在两个终端中键入以下命令: 终端1:监听输出端口
$ tail -f /dev/ttyXXX
端子2:写入输入端口
$ echo "Hello!" > /dev/ttyYYY
如果两个端口正确连接,终端1中将显示消息“Hello!”
最困难的部分通常是知道哪个硬件端口对应于哪个设备文件。可以使用交叉电缆将两个串行端口相互连接(这样一个端口的输入连接到另一个端口的输出) 假设端口配置正确(已安装和加载驱动程序),并且跨接电缆连接在端口之间,则可以在两个终端中键入以下命令: 终端1:监听输出端口
$ tail -f /dev/ttyXXX
端子2:写入输入端口
$ echo "Hello!" > /dev/ttyYYY
如果两个端口正确连接,终端1中将显示消息“Hello!”
最困难的部分通常是知道哪个硬件端口对应于哪个设备文件。像这样的一个小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);
}
像这样的一个小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);
}
如果您只想连接两个串行端口,可以使用
socat /dev/ttyS0,raw,echo=0,crnl /dev/ttyS1,raw,echo=0,crnl
(见附件)
但是,由于您希望与命令解释器交互,我认为您需要编写一个Perl脚本
选择
等待其中一个端口为您提供一些输入如果您只想连接两个串行端口,可以使用
socat /dev/ttyS0,raw,echo=0,crnl /dev/ttyS1,raw,echo=0,crnl
(见附件)
但是,由于您希望与命令解释器交互,我认为您需要编写一个Perl脚本
选择
等待其中一个端口为您提供一些输入你最终想要实现什么?我最初的嵌入式设计是通过一个带微控制器的电路连接两个串行端口,但我忘记了电路上有一个电平转换器。但是,我的Beagleboard xM上有一根备用USB串行电缆,它也有一个内置串行端口。我们的想法是能够通过这两个端口向linux机箱(本例中为Beagleboard)发送命令,并允许另一个端口查看端口发送的命令。您最终想要实现的是什么?我最初的嵌入式设计是通过一个带微控制器的电路将两个串行端口连接起来,但我忘了在我的电路上安装一个液位转换器。但是,我的Beagleboard xM上有一根备用USB串行电缆,它也有一个内置串行端口。其思想是能够通过这两个端口向linux盒(在本例中为Beagleboard)发送命令,并允许另一个端口查看端口发送的命令。Hmm。。这是真的。我没想过这个。这样的设备将永远来回地抛出任何命令。实际上,你的想法是可行的,因为这些命令只会被打印到第二个串行端口,而不会被执行。谢谢,嗯。。这是真的。我没想过这个。这样的设备将永远来回地抛出任何命令。实际上,你的想法是可行的,因为这些命令只会被打印到第二个串行端口,而不会被执行。谢谢。我希望连接是在内部完成的,而不是物理连接。我想知道这是否可行。我希望连接是在内部完成的,而不是物理连接。我想知道这是否可能。