Linux串口虚拟化,串口虚拟化:通过网络访问串口

By Falcon of TinyLab.org

2015-12-07

简介

串口是嵌入式设备中常见的调试、通信和下载接口。通常情况下,仅仅需要在开发主机上访问该串口,可通过标准的串口线或者 USB 线连到串口上。

如果要在开发主机之外也能访问到串口呢?

Serial Port Over Network

通过网络虚拟化串口的基本需求很简单,首先要把串口虚拟化为网络端口,之后在网络中的另外一台主机上通过 telnet 等工具直接访问该网络端口或者反过来把网络端口逆向为一个虚拟化的串口,进而通过串口的 minicom 等工具也可以访问。

这样的工具有 socat, netcat, ser2net, remserial, conmux,发现 socat 非常好用,这里在参考 socat-ttyovertcp.txt 的基础上介绍它的用法。

在具体实验之前,我们做如下假设:串口/dev/tty.SLAB_USBtoUART接入 MacBook Pro 的 cp2102

主机 IP192.168.1.168串口直连的主机 IP 地址

主机端口54321虚拟化以后的端口

虚拟串口/dev/tty.virt001

串口转 TCP 端口

sudo socat tcp-l:54321,reuseaddr,fork file:/dev/tty.SLAB_USBtoUART,waitlock=/var/run/tty0.lock,clocal=1,cs8,nonblock=1,ixoff=0,ixon=0,ispeed=9600,ospeed=9600,raw,echo=0,crtscts=0

也可简单使用:

sudo socat tcp-l:54321 /dev/tty.SLAB_USBtoUART,clocal=1,nonblock

TCP 端口转虚拟串口

sudo socat pty,link=/dev/tty.virt001,waitslave tcp:192.168.1.168:54321

远程访问串口

sudo minicom -D /dev/tty.virt001

telnet 192.168.1.168 54321

安全访问

应用实例

在哪些情况下会需要在开发主机之外访问串口呢?

一个典型的实例是:

最近刚用到一款 Wifi 物联网开发板(NodeMCU),开发主机是 MacBook Pro 笔记本,但是开发环境搭建在 Virtualbox 上跑的 Linux 中,因此,需要在 Linux 系统中访问串口,但是发现该串口(cp2102)即使通过 Virtualbox 正确设置允许 Linux 访问并且相应的驱动也正常启动,但是 minicom 无法访问该串口(怀疑是 Virtualbox 使用了 ohci,但该设备实际为 uhci),这个时候通过网络虚拟化的串口就非常有帮助了。

更多的例子可能是,如果想远程控制该设备,而该设备本身不支持网络,那么把串口接入带有网络的主机,并把串口通过网络虚拟化就很有帮助了。

汇总几个可能的用处:通过网络把串口接入到更便利的开发环境

通过网络把多个串口汇聚到同一个测试环境,方便统一访问

把串口接入网络,允许各地的学员分时共享同一个硬件学习资源

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值