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

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

我有一个有趣的问题。我正在开发一个嵌入式盒子,其中包含多个 Linux 实例,每个实例都在 ARM 处理器上运行。它们通过内部 1GBps 网络连接。我有一个连接到处理器 A 的串行端口设备节点(假设在其上运行 Linux-A)。我有一个在处理器 B 上运行的程序(比方说在 Linux-B 上)访问串口设备,就像它在本地连接到 Linux-B 一样。
我的程序调用设备节点上的术语 i/o 类型 api 调用来控制 tty 回显、字符模式输入。我想知道是否有一种方法可以创建一个在 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/

最佳答案

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

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

关于linux - 如何在 Linux 中创建一个将数据代理到真实设备的虚拟 io 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11196348/

相关文章:

c - 如何通过 gets() 函数将用户输入作为十六进制字符? (Linux)

php - 为什么PHP脚本在新服务器上执行时间很长?

linux - 是否可以将 `script` 通过管道传输到例如 `xz` 以进行即时压缩而不是文件或设备?

python - “串行”对象没有属性 'is_open'

python - raspberry pi 和 teensy 之间的串行通信(使用 UART/GPIO 引脚)

c - 使用C在shell中实现无限管道

c++ - 命令行程序如何支持管道参数?

linux - 文本 block 内的 tesseract 整数识别

linux - 提取 zip 文件内容并动态重命名目录

android - 在 kivy 发行版中包含 PySerial 库