一种LINUX下串口设备统一管理系统及方法与流程

文档序号:12063610阅读:319来源:国知局
一种LINUX下串口设备统一管理系统及方法与流程

本发明涉及通信领域,特别涉及一种LINUX下串口设备统一管理系统及方法。



背景技术:

Linux系统已经越来越多的应用在车载应用领域,一个车载台需要外接多个串行设备,比如计价器、LCD屏、LED屏、打印机等,如果接2G模块需要用到伪终端,程序内部的数据交互也可能用到伪终端,如果接3G模块需要用到USB转串口,相当于车载台需要管理多个物理、虚拟以及扩展串口。如果分别进行管理,无论是为每个串口开辟一个接收线程进行阻塞性的接收,还是通过周期性的非阻塞轮询操作,数据交互的效率都比较低而且加大了应用编程的复杂度。

同时,物理串口有物理串口独有的特性和操作模式;伪终端有伪终端独有的特性和操作模式;USB转串口又有USB转串口独有的特性和操作模式,虽然应用程序层在使用上是一样的,但是系统提供的接口和用法各有差异,需要应用开发人员对各种串口的特定接口使用有比较深入的了解,降低了开发效率,加大了开发的难度和串口业务维护管理的成本。



技术实现要素:

本发明的目的在于克服现有技术的不足,提出一种LINUX下串口设备统一管理系统及方法,实现了为上层应用提供通用的接口,达到了提高数据交互的效率,降低应用编程的复杂度和串口业务维护管理成本的目的。

本发明解决其技术问题所采用的技术方案是:

一种LINUX下串口设备统一管理系统,包括内核空间部分和用户空间部分,串口资源设置在内核空间部分的操作系统层,串口应用设置在用户空间部分的应用程序层,在操作系统层和应用程序层之间设置一个动态库层,动态库层设置在用户空间部分,包括:

串口管理核心模块和注册表模块;

注册表模块接收注册表接口单元提供的注册表项并进行注册,注册的串口属性信息包括串口ID号、串口类型标识、串口设备路径及接收缓冲区大小。

串口管理核心模块包括:

应用接口单元,为串口应用提供统一的接口;

具体的,统一的接口包括:初始化接口、串口参数设置接口和串口读写接口,串口参数设置包括波特率、起始位、停止位、奇偶校验形态等的设置。

注册表接口单元,提供注册表项,供注册表模块进行注册,实现串口ID号与串口设备节点的映射;

环形缓冲区单元,缓冲接收到的串口数据,等待用户读取数据;

多路复用转接管理单元,提供对串口描述符的多路转接;

具体的,多路转接使用select系统函数,该函数包含最大监听描述符、读描述符集合、写描述符集合、错误描述符集合及定时器超时时间,在打开串口进行初始化的时候把串口设备描述符加入到多路转接读描述符集中;

进一步的,多路转接单元设计成线程,线程中使用select函数对所有串口数据进行阻塞接收,当任何一个串口有数据进来的时候,线程被唤醒,启动串口数据的接收。

进一步的,读描述符集中包含一个管道读描述符,所述管道读描述符在系统初始化的时候创建并加入到读描述符集中,作为后续串口设备描述符加入的事件源,当任意串口打开时,向管道中发送1个字节的报文作为event事件,多路复用转接管理单元通过select调用获取该事件,进而触发事件处理,把新打开的串口设备描述符加入到读描述符集中。

具体的,串口资源包括:物理串口资源、USB转串口资源和伪终端串口资源。

具体的,串口应用包括:物理串口应用、USB转串口应用和伪终端串口应用。

一种LINUX下串口设备统一管理方法,包括:

将linux系统进行分层,在应用程序层和操作系统层中增加动态库层;

在动态库层中设置串口管理核心模块和注册表模块;

通过注册表模块注册串口属性信息到注册表中,所述串口属性信息包括串口ID号、串口类型标识、串口设备路径及接收缓冲区大小;

通过串口管理核心模块中的多路转接管理单元实现对串口描述符的多路转接;

通过串口管理核心模块中的环形缓冲区单元实现接收串口数据的缓冲;

通过串口管理核心模块中的应用接口单元为串口应用提供统一的接口;

进一步的,通过串口管理核心模块中的多路转接管理单元实现对串口描述符的多路转接包括:

使用select系统函数,该函数包含最大监听描述符、读描述符集合、写描述符集合、错误描述符集合及定时器超时时间,在打开串口进行初始化的时候把串口设备描述符加入到 多路转接读描述符集中;

多路转接单元设计成线程,线程中使用select函数对所有串口数据进行阻塞接收,当任何一个串口有数据进来的时候,线程被唤醒,启动串口数据的接收。

在读描述符集中包含一个管道读描述符,所述管道读描述符在系统初始化的时候创建并加入到读描述符集中,作为后续串口设备描述符加入的事件源,当任意串口打开时,向管道中发送1个字节的报文作为event事件,多路复用转接管理单元通过select调用获取该事件,进而触发事件处理,把新打开的串口设备描述符加入到读描述符集中。

进一步的,通过串口管理核心模块中的应用接口单元为串口应用提供统一的接口包括:

提供初始化接口、串口参数设置接口和串口读写接口,串口参数设置包括波特率、起始位、停止位、奇偶校验形态等的设置。

本发明提供的技术方案带来的有益效果是:通过在操作系统层和应用程序层之间增加一个中间件层,使用多路转接函数select和用户空间环形缓冲区,并通过一个线程对所有串口的数据接收进行管理的技术方案的实现,使得串口ID号和串口设备描述符一一对应,为上层应用提供了通用的接口,达到了提高数据交互的效率,降低应用编程的复杂度和串口业务维护管理成本的目标。

以下结合附图及实施例对本发明作进一步详细说明,但本发明的一种LINUX下串口设备统一管理系统及方法不局限于实施例。

附图说明

图1为本发明系统实施例的结构示意图;

图2为本发明方法实施例的串口数据统一接收处理流程图;

图3为本发明方法实施例的串口数据统一发送处理流程图。

具体实施方式

参见图1,本发明的一种LINUX下串口设备统一管理系统,包括内核空间部分和用户空间部分,串口资源11设置在内核空间部分的操作系统层,串口应用12设置在用户空间部分的应用程序层,在操作系统层和应用程序层之间设置一个动态库层,动态库层设置在用户空间部分,包括串口管理核心模块13和注册表模块14;

注册表模块14接收注册表接口单元132提供的注册表项并进行注册,注册的串口属性信息包括串口ID号、串口类型标识、串口设备路径及接收缓冲区大小。

串口管理核心模块13包括:

多路复用转接管理单元130,提供对串口描述符的多路转接;

环形缓冲区单元131,缓冲接收到的串口数据,等待用户读取数据;

注册表接口单元132,提供注册表项,供注册表模块进行注册,实现串口ID号与串口设备节点的映射;

应用接口单元133,为串口应用提供统一的接口,包括初始化接口、串口参数设置接口和串口读写接口;

具体的,多路转接使用select系统函数,该函数包含最大监听描述符、读描述符集合、写描述符集合、错误描述符集合及定时器超时时间,在打开串口进行初始化的时候把串口设备描述符加入到多路转接读描述符集中;

进一步的,多路转接单元设计成线程,线程中使用select函数对所有串口数据进行阻塞接收,当任何一个串口有数据进来的时候,线程被唤醒,启动串口数据的接收。

进一步的,读描述符集中包含一个管道读描述符,所述管道读描述符在系统初始化的时候创建并加入到读描述符集中,作为后续串口设备描述符加入的事件源,当任意串口打开时,向管道中发送1个字节的报文作为event事件,多路复用转接管理单元通过select调用获取该事件,进而触发事件处理,把新打开的串口设备描述符加入到读描述符集中。

具体的,串口资源包括:物理串口资源、USB转串口资源和伪终端串口资源。

具体的,串口应用包括:物理串口应用、USB转串口应用和伪终端串口应用。

本实施例中,注册表模块按照既定格式,收集串口属性信息,如串口ID号、串口类型标识、串口设备路径及接收缓冲区大小。

具体的,包括4个物理串口,两个USB转串口,两对伪终端,一个伪终端主设备和一个伪终端从设备组成一个伪终端对,注册表模块形态如表所示:

系统初始化的时候把这些参数信息注册到注册表中,通过串口ID号就可以知道对应串口设备的类型,串口设备路径,以及数据接收缓冲区的大小。

对于物理串口,直接通过设备路径来打开并设置串口设备,所以这里注册的路径即是串口设备节点的路径;

对于USB转串口,串口ID号随着每次插拔会变化,每次打开时需要通过USB属性参数,获取USB转串口的设备节点路径,所以这里注册的路径是USB转串口的物理属性路径;

对于伪终端主设备,每次打开都使用相同的设备节点路径,所以其固定为/dev/ptmx;

对于伪终端从设备,永远依赖于与之对应的伪终端主设备,所以其设备路径填充的是其对应伪终端主设备所映射的串口ID号。

本实施例中,实现了不同种类串口设备的统一管理,使得应用层不需要关注串口的物理类型,所有串口设备对应用层来说只是一个串口ID号的区别。

通过串口ID号进行应用交互的过程如下:

应用程序通过串口ID号请求初始化串口,动态库层根据应用程序传入的串口ID号在注册表中查找对应该串口ID号的串口设备的类型、串口设备路径信息以及接收缓冲区大小;

动态库层根据串口设备的属性和路径信息操作对应串口设备的系统调用接口进行串口设备的打开、波特率设置、校验位设置、以及缓冲区大小设置;

动态库层绑定串口ID号和打开串口设备的描述符,具体的,串口设备打开时,通过open系统调用关联串口设备路径和串口设备的描述符,由于在注册的时候已经把串口ID号和串口设备路径关联起来了,因此形成串口的ID号和对应串口设备描述符一一对应;

把串口设备描述符集纳入到多路转接管理模块中进行统一管理;

后续数据的收发即可通过串口设备的描述符来进行。

基于本发明的一种LINUX下串口设备统一管理方法的实时串口数据接收处理流程,参见图2,包括如下步骤:

步骤201:建立管道;

具体的,初始化动态库,在动态库启动时创建匿名管道。

步骤202:启动接收线程;

具体的,动态库启动时创建并启动串口数据接收线程。

步骤203:初始化select的读描述符集;

步骤204:在数据接收线程中,将管道的读描述符标识加入select的读描述符集;

步骤205:把已打开的串口设备描述符加入到select读描述符集中;

具体的,初始化时检查是否存在已经打开的各类串口,如果有则把该串口设备描述符加 入到select的读描述符集。

步骤206:调用select进行无超时的阻塞等待;

步骤207:判断管道是否有事件;

具体的,select返回后,检查管道事件,如果管道有事件,说明某一个或多个串口设备被打开,实施步骤208;如果没有,实施步骤209;

步骤208:调用read函数读取管道事件;

具体的,需要实时的把打开的串口设备描述符加入到select的读描述符集中,返回到步骤203执行。

步骤209:轮询串口设备描述符查看是否串口有数据;

步骤210:判断是否完成串口设备描述符的轮询;

具体的,如果已完成所有串口设备描述符的检测,返回步骤203;否则,实施步骤211。

步骤211:判断串口是否有数据;

具体的,判断本次检测的串口设备描述符是否有数据,如果没有数据,返回步骤210,继续检测其他串口设备描述符;如果有数据,实施步骤212。

步骤212:读取串口数据并把数据写入到环形缓冲区;

具体的,串口数据写入到环形缓冲区后,返回步骤210。

基于本发明的一种LINUX下串口设备统一管理方法的实时串口数据发送处理流程,参见图3,包括如下步骤:

步骤301:应用程序请求发送数据;

步骤302:动态库层根据传入的串口ID号,找到对应该ID号的串口设备描述符;

步骤303:通过串口设备描述符使用系统函数write把数据提交到操作系统层发送。

本发明提供的技术方案带来的有益效果是:通过在操作系统层和应用程序层之间增加一个中间件层,使用多路转接函数select和用户空间环形缓冲区,并通过一个线程对所有串口的数据接收进行管理的技术方案的实现,使得串口ID号和串口设备描述符一一对应,为上层应用提供了通用的接口,达到了提高数据交互的效率,降低应用编程的复杂度和串口业务维护管理成本的目标。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1