Null modem emulator (com0com) for linux

◇◆丶佛笑我妖孽 提交于 2019-12-04 11:58:26

问题


I have a project that contains some unitary tests used to test the serial communications using COM ports (in windows). I use com0com to create a virtual pair of bounded ports and execute the tests.

However I don't know how to do that in Linux neither in MACOS. I've read this topic: Are there some program like COM0COM in linux? Where the answer suggests using socat. I've tried that approach but it doesn't work, my application doesn't detect the ports I've just defined in socat.

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

My theory is that socat cannot create virtual ports, it can only bind together existing ports.

How can I solve this issue?

Thanks!

EDIT:

This is what I get after running the previous socat command. If you look closely, you'll see that COM98 and COM99 ports are in /dev/. However if I write to /dev/COM98 and use tail -f to follow COM99 I don't get any output from it.

EDIT2:

Well, if I use cat instead of tail I can see the output (why?!)

'

'

'

EDIT3:

SOLUTION: Don't name the ports COMxx but ttySxx instead!

Example:

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

Reason why: Some serial-comm libraries may not support other nomenclature, such as RXTX 2.X.X and previous versions.


回答1:


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

works just fine and prints:

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]

I assume that you should be able to write to /dev/pts/32 and read from /dev/pts/33.

Also is /dev/COM9{8,9} a character device you can use?

ls -l /dev/COM989 

should print a mode which starts with c if that is the case.



来源:https://stackoverflow.com/questions/23867143/null-modem-emulator-com0com-for-linux

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!