socat两个串口一起

时间:2015-11-19 17:54:04

标签: linux unix socat

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

此库仅查找以ttySttyUSBttyACM开头的设备文件。因此,我不能做常规(这将产生/dev/pts/x中的串行端口):

socat -d -d pty,raw,echo=0 pty,raw,echo=0

我尝试过:

socat /dev/ttyS20 /dev/ttyS21

但它不起作用。它不会退出或打印错误。我尝试使用屏幕连接到/dev/ttyS20,但它只是说[screen is terminating]

我查看了ttyS20(和21)的用户权限,他们都拥有我的用户所在的组dialout(用户:root)。

我是否忽略了具有权限的内容?是否有更好的方法可以一起完成这一切?

2 个答案:

答案 0 :(得分:1)

您需要将新创建的ptys链接到其他位置

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。

答案 1 :(得分:0)

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

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

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