6

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

ttyS此库仅查找以、ttyUSB或.开头的设备文件ttyACM。正因为如此,我不能做常规(这会产生串行端口/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),我的用户在(克里斯)中。

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

4

2 回答 2

3

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

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

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

于 2015-11-25T03:29:56.823 回答
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。

于 2015-11-21T18:28:31.983 回答