ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在docker中使用主机串口通讯

2022-09-09 21:30:38  阅读:224  来源: 互联网

标签:容器 宿主 windows 主机 串口 device docker


在进行软件docker化的过程时,很大的一个阻碍就是软件与各种外围硬件设备的交互,网口通信的设备能够很容易地接入容器,但是串口设备则要复杂一些。本文讨论在windows和linux下docker容器使用串口的方法。

由于wsl2也在一直更新,不排除未来有可能直接支持wsl的情况

方案

docker run中提供了使用的本地设备资源的指令--device,但是依然有些限制,根据宿主与容器的情况,可以简单分为以下几种:

宿主Linux,容器为Linux容器

直接支持,在linux系统中,串口使用--device=/dev/ttyS1:/dev/ttyS2参数运行,即可直接在容器中访问串口1。

宿主Linux,容器为windows容器

没用过这个套路,太诡异了,本文不讨论这种情况。

宿主Windows,容器为Windows容器

按照官方的文档,需要使用CLASSID来做映射,官方给了一个示例,可以在windows容器中访问宿主机器的所有串口:

PS C:\> docker run --device=class/86E0D1E0-8089-11D0-9CE4-08003E301F73 mcr.microsoft.com/windows/servercore:ltsc2019

宿主Windows,容器为Linux容器

这里需要细分两种情况,分别对应WSL1与WSL2,其中WSL1可以直接访问本机的资源,文件也是可以直接访问的。

我机器上没有WSL1,也没有去尝试在WSL1基础上运行docker desktop并验证是否真实可用,有兴趣的读者请自行尝试。

WSL2就麻烦了,从官网文档的的比较来看,WSL2不支持访问宿主的串口设备,不过还是可以支持USB转串口设备。

Workaround

似乎在官方推出正式解决方案之前,这个方式无解了,但是我们可以将串口转成网口进行通信,从而实现docker变相访问串口。例如,对于硬件设备,可以通过RS232/485转以太网模块实现将串口通信,典型的模块有“有人串口服务器”系列的转换器。当然,也可以写一个小程序用来将串口接收到的数据转发到docker容器的端口。

注意,对于使用RTS之类的串口功能的通信,使用socket进行模拟可能不能模拟对应的访问控制。

参考

标签:容器,宿主,windows,主机,串口,device,docker
来源: https://www.cnblogs.com/podolski/p/16668304.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有