9

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

我在想一些事情:Linux-B 有 /dev/ttyvirtual。写入它的任何内容都会通过网络套接字传输到 Linux-A 串行服务器。串行服务器执行真实设备上的 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/

4

2 回答 2

9

看看openpty(3)。这使您可以创建一个伪 TTY(如/dev/pts/0ssh 连接使用的那种),它将像普通 TTY 一​​样响应,但让您可以直接以编程方式控制连接。

通过这种方式,您可以托管一个串行设备(例如/dev/pts/5),您可以在网络连接之间转发数据,然后其他应用程序可以在不知道底层网桥的情况下对其执行串行操作。

于 2012-06-25T20:00:13.397 回答
7

我最终使用了socat

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

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

于 2012-07-11T13:34:35.183 回答