如何在Linux中创建一个虚拟io设备,将数据代理到真实设备?

时间:2012-06-25 19:52:33

标签: linux serial-port pipe virtual-serial-port

我有一个有趣的问题。我正在开发一个嵌入式盒子,其中有多个Linux实例在ARM处理器上运行。它们通过内部1GBps网络连接。我有一个连接到处理器A的串行端口设备节点(假设Linux-A在其上运行)。我有一个在处理器B上运行的程序(让我们说在Linux-B上)访问串口设备,好像它本地连接到Linux-B一样。
我的程序调用设备节点上的术语i / o类型api调用来控制tty echo,字符模式输入。我想知道的是,是否有办法创建一个在Linux-B上可用的虚拟串行设备以某种方式通过内部网络与Linux-A上的真实串行设备进行通信。

我正在思考以下问题: Linux-B有/ dev / ttyvirtual。任何写入它的内容都会通过网络套接字传输到Linux-A serialserver。串口服务器在真实设备上解析api调用,比如/ dev / ttys0。 等待ttys0的任何数据都会被传输回/ dev / ttyvirtual。

快速完成这项工作涉及的所有事情是什么?

感谢
Videoguy

更新: 我找到了一个讨论 http://fixunix.com/bsd/261068-network-socket-serial-port-question.html有很棒的指针。
另一个有用的链接是http://blog.philippklaus.de/2011/08/make-rs232-serial-devices-accessible-via-ethernet/

2 个答案:

答案 0 :(得分:9)

看看openpty(3)。这使您可以创建一个伪TTY(如/dev/pts/0,即ssh连接使用的排序),它将作为正常的TTY响应,但是可以直接对连接进行编程控制。

通过这种方式,您可以托管在网络连接之间转发数据的串行设备(例如/dev/pts/5),然后其他应用程序可以在其上执行串行操作,而无需了解底层网桥。

答案 1 :(得分:7)

我最终使用socat

可以在此处找到示例:socat examples

你在两台机器上背靠背。一个侦听tcp端口并将数据转发到本地虚拟端口或pty。另一个盒子上的socat使用真实设备作为输入,并将任何数据转发到tcp端口。