【问题标题】:How create a virtual io device in Linux that proxies data to real device?如何在 Linux 中创建将数据代理到真实设备的虚拟 io 设备?
【发布时间】:2012-06-25 19:52:32
【问题描述】:

我有一个有趣的问题。我正在开发一个嵌入式机器,其中包含多个 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。

为了快速完成这项工作,需要做哪些事情?

谢谢
视频人

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 有没有办法可以创建ttyS1 或其他格式的端口?因为许多可用的软件只显示这些类型的端口供选择
    【解决方案2】:

    我最终使用了socat

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

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

    【讨论】:

    • 有没有办法可以创建ttyS1 或其他格式的端口?因为许多可用的软件只显示这些类型的端口供选择
    猜你喜欢
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多