基于Qt对Linux系统下嵌入软件的研究与应用

2020-06-13 06:58王星
电子技术与软件工程 2020年2期
关键词:应用层通讯指令

文/王星

(苏州长风航空电子有限公司 江苏省苏州市 215151)

1 引言

嵌入式信息管理软件(以下简称ISI软件)运行在Linux操作系统,驻留于计算机及图形板中,主要完成与外部设备通讯、数据处理和应用、控制内部各模块协调工作。

ISI软件架构基于模块化设计思想,采用分层实现的模式,由驱动层、中间逻辑层、应用层组成。驱动层主要包括,基于ipmitool与BMC通过串口通讯实现、基于I²C接口的各子模块与BMC的通讯实现、操作系统信息交互的CLI指令集的调用实现、与信息汇总模块的UDP通讯实现、与音视频采集模块、智能交互模块的TCP通讯实现;中间逻辑层主要包括,通过驱动层获取信息并进行信息处理后反馈给应用层,接受应用层的反馈及控制指令对驱动层进行信息交互和控制;应用层主要包括,实现信息最终的输出及控制指令的确认实现工作。ISI软件的架构设计如图1。

2 开发简介

ISI软件主要功能为,通过UDP组播方式实现汇总后的健康信息上报给信息汇总设备(以下简称SBIT);通过Qt的QProcess进程机制,采用指令调用、接口监控模式获取BMC模块、计算机及图形模块、智能交互模块的信息;利用Linux操作系统内置的shell提供的管道机制,实现对数据的选择性获取;使用TCP通讯,实现对音视频采集模块的远程控制;利用并通过ipmitool中间件,通过串口实现对BMC模块中各子模块电压、电流、温度、CPU等信息的获取;实现Linux操作系统的开机自启动功能。

ISI软件的信息分为健康信息和控制信息,健康信息包括各模块的电流、电压值、温度、自检状态、运行状态等信息,控制信息主要是信息获取指令、控制指令等,信息流详见图2。

3 信息处理及传输的研究与应用

3.1 UDP传输模式的研究与应用

UDP方式信息上报SBIT可以采取点对点模式或组播模式。

UDP方式信息上报方案如下:

方案1,采用点到点的模式,通过目的源和发送源采用不同的IP地址进行设备区分,实现的是单对单的通讯模式,通讯采用非握手机制进行传输。

方案2,采用组播模式,通过目的源和发送源采用同一组播IP地址的不同端口号进行设备区分,实现的是单对多的通讯模式,通讯采用非握手机制进行传输。

比较两种方案,在实现单一接收源的应用场景中,两种实现机制的优劣基本一致,但如果存在多台接收源时,采用组播方式可以实现一次发送,多点接收,而点对点的模式则需要多次发送。根据应用场景,ISI软件选择的是组播方式。

图1:软件架构逻辑图

图2:软件信息流图

3.2 信息处理的研究与应用

在对大数据信息进行传输时,若数据帧定义按无裁剪方式发送,就单一以发送某一包字节为889字节数据而言,里面含有大量的无用空置信息。为减少主机及自身的性能消耗,我们采用如图3方式组织报文,通过模块标识+数据标识的方式,对ICD数据模块中定义了但不需要上报的信息进行裁剪,以尽量减少数据信息的上报大小,并通过标识号ID区分各段信息。经过裁剪,每次发送字节减少到558字节,这在频繁信息交互中,很大提高了自身及主机运行效率。

图3:数据帧组织图

图4:ISI运行效果图

4 方法实现

4.1 驱动层实现

驱动层实现从如下几个方面实现:

(1)UDP组播驱动实现:区别于常用的点对点的UDP传输模式,我们采用的是UDP组播方式进行驱动开发,组播的最大优势在于一次发送多处接收,避免一个成员对多个成员通讯时,相同反馈的多次发送操作,提高了整机性能;

(2)TCP驱动实现:TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行数据的发送。而在客户端,一旦有数据到来就会发出readyRead()信号,我们可以关联此信号,进行数据的接收;

(3)CLI指令集驱动实现:CLI指令集驱动的实现分为指令执行和指令执行后获取系统反馈信息,使用机制是Qt的QProcess进程机制;

(4)基于ipmitool与BMC串口驱动实现:ipmitool是一种命令行方式的ipmi平台管理工具,支持ipmi1.5规范,基于ipmitool与BMC串口驱动实现,首先通过ipmitool提供的指令命令,开启操作系统物理串口与BMC的连接,并通过QT的QProcess及信号/槽机制,实现指令的执行和BMC提供的健康数据的获取;

4.2 中间逻辑层实现

中间逻辑层作为驱动层和应用层的桥梁,主要实现各信息的处理,对指令的传输及反馈功能。

中间逻辑层从如下几个方面实现:

(1)实现定时时钟片,提供任务调度机制的实现;

(2)建立指令判断机制,对正常指令、异常指令、实时响应指令进行判断并提供反馈标志;

(3)建立信息处理模式,对获取的健康信息进行信息处理;

提供驱动层和应用层API接口实现。

4.3 应用层实现

应用层实现从如下几个方面实现:

(1)上报SBIT模块健康信息实现:软件正常启动后,通过组播周期向SBIT报送初始化结束报文(握手报文),当接收到SBIT(上位机)应答包后,结束发送握手报文,并将以周期向SBIT报送平台数据报文;

(2)获取BMC信息实现:通过任务调度机制,周期调度获取BMC的自检数据,利用Qt强大的字符串检索功能,实现对需要信息的截取和转换及处理工作;

(3)基于Linux系统获取信息功能实现:使用Qt的system()+Linux系统管道机制实现对系统信息的获取,包括CPU、内存、存储容量占用率、IP信息等内容;

(4)基于Linux系统自启动功能实现:通过注册服务的方式,将ISI软件作为系统服务自动运行;

4.4 ISI软件运行效果图

ISI软件调试完成后,安装在一体机平台上进行了验证,设计达到了预期效果。效果如图4所示。

5 总结

ISI软件是基于Qt+Linux开发,实现嵌入在计算机板上运行的多API接口实现的信息管理类软件,具有很强的针对性和专业代表性。在设计实现过程中,涉及的知识层面包括计算机硬件系统架构,Linux操作系统底层实现,TCPUDP网络通讯,Qt开发平台和C++语言等,鉴于时间和学识有限,一些设计及实现并不是尽善尽美,待完善和补充的内容有很多,请批评指正。

猜你喜欢
应用层通讯指令
《茶叶通讯》简介
《茶叶通讯》简介
通讯报道
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
通讯简史
新一代双向互动电力线通信技术的应用层协议研究
坐标系旋转指令数控编程应用
Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair