【问题标题】:socat two serial port togethersocat 两个串口在一起
【发布时间】:2015-11-19 17:54:03
【问题描述】:

我正在编写一个 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)。

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

【问题讨论】:

  • 如果我以 root 身份运行(测试没有),我可以将ptys 符号链接到ttySs。我认为这就是link= 标志的作用,对吗?
  • 你不能简单地mock purejavacomm 类吗?

标签: linux unix socat


【解决方案1】:

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

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

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

【讨论】:

  • 我无法在主目录中创建 dev 文件夹,这是因为库只搜索 /dev 中的内容。
【解决方案2】:

您需要将新创建的 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。

【讨论】:

  • 我不想使用sudo,因为这需要root 访问权限。我不希望我的测试以 root 身份运行。测试将绑定这些串行端口作为测试的一部分。
  • 串口有dialout这个简单的事实应该足以将它们链接在一起我认为......
  • 可以设置端口吗?还是他们的创作必须是你测试的一部分?我有几个系统,其中操作系统在启动时创建虚拟 com 端口,然后具有正常用户权限的应用程序使用它们。您的测试不需要以这种方式获得 root 权限。我相信有些人可能会对我不屑一顾,但对于这种事情,我通常会编写一个脚本,然后将其粘贴到 /etc/rc.local 中。
  • 创建必须是测试的一部分,这模拟了连接到计算机的硬件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
相关资源
最近更新 更多