Linux 的虚拟串行端口

新手上路,请多包涵

我需要在 Linux 上测试一个串口应用程序,但是,我的测试机只有一个串口。

有没有办法将虚拟串行端口添加到 Linux 并通过 shell 或脚本模拟设备来测试我的应用程序?

注意:我无法重新映射端口,它在 ttys2 上硬编码,我需要在编写应用程序时对其进行测试。

原文由 JeffV 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您可以为此使用 pty(“伪电传打字机”,其中串行端口是“真正的电传打字机”)。从一端打开 /dev/ptyp5 ,然后将您的程序附加到 /dev/ttyp5ttyp5 就像一个串行端口,但会通过 /dev/ptyp5 发送/接收它所做的一切。

如果你真的需要它来与一个名为 /dev/ttys2 的文件对话,那么只需将你的旧 /dev/ttys2 ttys2 创建一个从 ptyp5 的符号链接 ---

当然,您可以使用 ptyp5 以外的其他数字。也许选择一个数字大的以避免重复,因为您所有的登录终端也将使用 ptys。

维基百科有更多关于 ptys 的信息: http ://en.wikipedia.org/wiki/Pseudo_terminal

原文由 apenwarr 发布,翻译遵循 CC BY-SA 3.0 许可协议

补充@slonik的答案。

您可以通过以下步骤测试 socat 以创建虚拟串行端口(在 Ubuntu 12.04 上测试):

打开一个终端(我们称之为终端 0)并执行它:

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

上面的代码返回:

 2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/2
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/3
2013/11/01 13:47:27 socat[2506] N starting data transfer loop with FDs [3,3] and [5,5]

打开另一个终端并写入(终端 1):

 cat < /dev/pts/2

该命令的端口名称可以根据电脑进行更改。这取决于先前的输出。

 2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/**2**
2013/11/01 13:47:27 socat[2506] N PTY is /dev/pts/**3**
2013/11/01 13:47:27 socat[2506] N starting data transfer loop with FDs

您应该使用突出显示区域上可用的数字。

打开另一个终端并写入(终端 2):

 echo "Test" > /dev/pts/3

现在回到 1 号航站楼,您将看到字符串“Test”。

原文由 cantoni 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题