Linux 将两个串行端口连接在一起

Linux 将两个串行端口连接在一起,linux,unix,socat,Linux,Unix,Socat,我正在编写一个JUnit测试来测试我的应用程序。该应用程序是用Java编写的,并使用purejavacomm库。为了测试串行解析器,我想设置一个虚拟串行端口,以便测试可以与解析器通信。除了简单的解析之外,它还可以在串行端口可用时动态连接到串行端口,因此我不想使用,比如说PipedInputStream 此库仅查找以ttyS、ttyUSB或ttyACM开头的设备文件。因此,我无法执行常规操作(这将在/dev/pts/x中生成串行端口): 我试着做: socat /dev/ttyS20 /dev/t

我正在编写一个JUnit测试来测试我的应用程序。该应用程序是用Java编写的,并使用purejavacomm库。为了测试串行解析器,我想设置一个虚拟串行端口,以便测试可以与解析器通信。除了简单的解析之外,它还可以在串行端口可用时动态连接到串行端口,因此我不想使用,比如说
PipedInputStream

此库仅查找以
ttyS
ttyUSB
ttyACM
开头的设备文件。因此,我无法执行常规操作(这将在
/dev/pts/x
中生成串行端口):

我试着做:

socat /dev/ttyS20 /dev/ttyS21
但它不起作用。它不会退出,也不会打印错误。我试图用screen连接到
/dev/ttyS20
,但它只是说,
[screen正在终止]

我查看了
ttyS20
(和21)的用户权限,它们都有一个组,
dialout
(用户:root),我的用户在其中(chris)


我是不是忽略了一些有权限的东西?有没有更好的方法一起完成这项工作?

您需要将新创建的PTY链接到另一个位置

socat -u -u pty,raw,echo=0,link=/dev/ttyS20 pty,raw,echo=0,link=/dev/ttyS21
使用socat创建虚拟端口后,请尝试更改管道两端的所有权,以便于访问

sudo chown user:user /dev/ttyS20
sudo chown user:user /dev/ttyS21

您还可以使用chmod将权限更改为777。

然后我建议您在主目录中创建一个dev文件夹,并将链接指向那里

socat pty,raw,echo=0,link=/home/user/dev/ttyS20 pty,raw,echo=0,link=/home/user/dev/ttyS21

您应该能够在没有root的情况下访问它。如果是单向通信,我通常喜欢添加-u选项。

如果我以root身份运行(测试没有),我将能够将
pty
s符号链接到
ttyS
s。我假设
link=
标志就是这样做的,对吗?您不能简单地使用purejavacomm类吗?我不想使用
sudo
,因为这需要根访问权限。我不希望我的测试以root身份运行。作为测试的一部分,测试将绑定这些串行端口。简单的事实是,串行端口具有组
拨出
应该足以将它们链接在一起,我想……您可以设置端口吗?或者他们的创作必须是你测试的一部分?我有几个系统,操作系统在引导时创建虚拟com端口,然后具有正常用户权限的应用程序使用它们。您的测试不需要以这种方式拥有root权限。我相信有些人可能会不喜欢我,但对于这类事情,我通常会编写一个脚本,然后将其粘贴到/etc/rc.local中。创建必须是测试的一部分,这模拟了连接到计算机的硬件。我无法在主目录中创建dev文件夹,因为库只在/dev中搜索内容。
socat pty,raw,echo=0,link=/home/user/dev/ttyS20 pty,raw,echo=0,link=/home/user/dev/ttyS21