我有一个项目,其中包含一些用于使用COM端口(在Windows中)测试串行通信的单一测试。我使用com0com创建一对虚拟端口并执行测试。
但是我不知道如何在Linux中也不知道如何在MACOS中做到这一点。我已经阅读了这个主题:Are there some program like COM0COM in linux?答案建议使用socat。我尝试过这种方法,但它不起作用,我的应用程序没有检测到我在socat中定义的端口。
socat PTY,link=/dev/COM98 PTY,link=/dev/COM99
我的理论是socat无法创建虚拟端口,它只能绑定现有端口。
我该如何解决这个问题?
谢谢!
修改
这是我在运行上一个socat命令后得到的。仔细观察,您会发现COM98和COM99端口位于/ dev /中。但是,如果我写入/ dev / COM98并使用 tail -f 来关注COM99,我就不会从中获取任何输出。
EDIT2:
好吧,如果我用猫而不是尾巴我可以看到输出(为什么?!)
'
'
'
EDIT3:
解决方案:不要将端口命名为COMxx,而是命名为ttySxx!
示例:
socat PTY,link=/dev/ttyS98 PTY,link=/dev/ttyS99
原因:某些serial-comm库可能不支持其他命名法,例如RXTX 2.X.X和以前的版本。
答案 0 :(得分:6)
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开头的模式。