适用于Linux的虚拟串行端口
我需要在Linux上测试一个串行端口应用程序,但是,我的测试计算机只有一个串行端口。
有没有一种方法可以通过在Shell或者脚本中模拟设备来向Linux添加虚拟串行端口并测试我的应用程序?
注意:我无法重新映射端口,它在ttys2上进行了硬编码,因此我需要在编写应用程序时对其进行测试。
解决方案
回答
我们可以使用USB-> RS232适配器吗?我有几个,他们只使用FTDI驱动程序。然后,我们应该能够将/ dev / ttyUSB0(或者创建的任何东西)重命名为/ dev / ttyS2.
回答
我可以想到三种选择:
实施RFC 2217
RFC 2217涵盖了TCP / IP标准的com端口,该端口允许一个系统上的客户端模拟本地程序的串行端口,同时透明地向实际具有该串行端口的另一系统上的服务器发送和接收数据以及控制信号。这是一个高层次的概述。
我们将要做的是找到或者实现一个客户端com端口驱动程序,该驱动程序将在PC上实现系统客户端的功能,看起来像是一个真正的串行端口,但实际上将所有内容传送给服务器。我们可能可以从Digi,Lantronix等免费获得此驱动程序,以支持其真正的独立串行端口服务器。
然后,我们将在另一个程序中本地实现连接的服务器端,从而允许客户端根据需要进行连接并发出数据和控制命令。
这可能不容易,但是RFC在那里,我们也许可以找到实现连接一侧或者两侧的开源项目。
修改linux串口驱动
另外,Linux的串行端口驱动程序源也很容易获得。以这种方式,保留硬件控制部件,并让一个驱动程序运行两个/ dev / ttySx端口,作为简单的回送。然后将真实程序连接到ttyS2,将模拟器连接到另一个ttySx。
在环回中使用两根USB <->串行电缆
但是现在最容易做的事情是?在两个串行端口USB设备上花费40美元,将它们连接在一起(空调制解调器),实际上有两个真实的串行端口,一个用于测试程序,一个用于模拟器。
-亚当
回答
我们可以为此使用pty(" pseudo-teletype",其中串行端口是" real teletype")。从一端打开" / dev / ptyp5",然后将程序添加到" / dev / ttyp5"; ttyp5的作用就像一个串行端口,但是会通过/ dev / ptyp5发送/接收它所做的一切。
如果我们真的需要它与名为/ dev / ttys2
的文件进行对话,则只需将旧的/ dev / ttys2
移开,并从ptyp5
到ttys2
建立符号链接。
当然,我们可以使用ptyp5
以外的其他数字。也许选择一个数字较大的名称以避免重复,因为所有登录终端也将使用pty。
维基百科提供有关pty的更多信息:http://en.wikipedia.org/wiki/Pseudo_terminal
回答
我们可能需要查看使用内核驱动程序创建linux虚拟串行端口的Tibbo VSPDL-它似乎很新,并且现在可以下载(测试版)。目前还不确定许可证,或者他们是否只想将来将其商业化。
还有其他商业选择,例如http://www.ttyredirector.com/。
在开放源代码中,Remserial(GPL)也可以使用Unix PTY来完成我们想要的操作。它以"原始形式"将串行数据传输到网络套接字。创建端口时,必须完成类似于STTY的终端参数设置,以后似乎不支持按RFC 2217中所述进行更改。我们应该能够运行两个remserial实例来创建一个像com0com这样的虚拟nullmodem,除了我们需要预先设置端口速度等。
Socat(也称为GPL)就像Remserial的扩展变体一样,具有许多其他选项,包括用于将PTY重定向到其他东西的" PTY"方法,这可以是Socat的另一个实例。对于单元tets,socat可能比remserial好,因为我们可以直接将文件分类到PTY中。请参见联机帮助页上的PTY示例。 " contrib"下存在一个修补程序,以提供RFC2217支持以协商串行线路设置。