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

vid*_*guy 9 linux serial-port virtual-serial-port pipe

我有一个有趣的问题.我正在研究一个嵌入式盒子,其中有多个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/

mrb*_*mrb 9

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

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


vid*_*guy 7

我最终使用了socat

可以在这里找到示例:socat示例

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