9

我有一个项目,其中包含一些用于测试使用 COM 端口(在 Windows 中)的串行通信的单一测试。我使用 com0com 创建一对虚拟的有界端口并执行测试。

但是我不知道如何在 Linux 和 MACOS 中做到这一点。我读过这个话题:Linux中有像COM0COM这样的程序吗?答案建议使用socat。我已经尝试过这种方法,但它不起作用,我的应用程序没有检测到我刚刚在 socat 中定义的端口。

socat PTY,link=/dev/COM98 PTY,link=/dev/COM99

我的理论是 socat 不能创建虚拟端口,它只能绑定现有端口。

我该如何解决这个问题?

谢谢!

编辑:

这是我在运行上一个 socat 命令后得到的。如果仔细观察,您会发现 COM98 和 COM99 端口位于 /dev/ 中。但是,如果我写入 /dev/COM98 并使用tail -f跟踪 COM99,我不会从中得到任何输出。

在此处输入图像描述

编辑2:

好吧,如果我使用 cat 而不是 tail 我可以看到输出(为什么?!)

在此处输入图像描述

'

'

'

编辑3:

解决方案:不要将端口命名为 COMxx 而是 ttySxx!

例子:

socat PTY,link=/dev/ttyS98 PTY,link=/dev/ttyS99

原因:一些串行通信库可能不支持其他命名法,例如 RXTX 2.XX 和以前的版本。

4

1 回答 1

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

工作正常并打印:

2014/05/26 13:29:15 socat[27177] N PTY is /dev/pts/32
2014/05/26 13:29:15 socat[27177] N PTY is /dev/pts/33
2014/05/26 13:29:15 socat[27177] N starting data transfer loop with FDs [3,3] and [5,5]

我假设您应该能够写入 /dev/pts/32 并从 /dev/pts/33 读取。

/dev/COM9{8,9} 也是您可以使用的字符设备吗?

ls -l /dev/COM989 

如果是这种情况,应该打印一个以 c 开头的模式。

于 2014-05-26T11:29:56.673 回答