socat两个串口一起

Chr*_*ith 5 unix linux socat

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

该库只查找与启动设备文件ttySttyUSBttyACM。因此,我无法执行常规操作(这会在中产生串行端口/dev/pts/x):

socat -d -d pty,raw,echo=0 pty,raw,echo=0
Run Code Online (Sandbox Code Playgroud)

我试着做:

socat /dev/ttyS20 /dev/ttyS21
Run Code Online (Sandbox Code Playgroud)

但这不起作用。它不会退出或显示错误。我尝试/dev/ttyS20使用screen 连接,但它只是说,[screen is terminating]

我查看了ttyS20(和21)的用户权限,它们都具有dialout用户(克里斯)所在的组(用户:root)。

我是否可以忽略某些权限?有没有更好的方法可以一起完成这些工作?

小智 5

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

socat pty,raw,echo=0,link=/home/user/dev/ttyS20 pty,raw,echo=0,link=/home/user/dev/ttyS21
Run Code Online (Sandbox Code Playgroud)

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


小智 1

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

socat -u -u pty,raw,echo=0,link=/dev/ttyS20 pty,raw,echo=0,link=/dev/ttyS21
Run Code Online (Sandbox Code Playgroud)

使用 socat 创建虚拟端口后,尝试更改管道两端的所有权以允许更轻松的访问。

sudo chown user:user /dev/ttyS20
sudo chown user:user /dev/ttyS21
Run Code Online (Sandbox Code Playgroud)

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