基于Linux动态链接库实现用电信息采集终端快速升级的方法与流程

文档序号:12278997阅读:389来源:国知局
基于Linux动态链接库实现用电信息采集终端快速升级的方法与流程

本发明涉及一种用电信息采集终端快速升级的方法,更具体的说,尤其涉及一种基于Linux动态链接库实现用电信息采集终端快速升级的方法。



背景技术:

用电信息采集终端 (electric energy data acquire terminal)是对各信息采集点用电信息采集的设备,简称采集终端。可以实现电能表数据的采集、数据管理、数据双向传输以及转发或执行控制命令的设备。用电信息采集终端按应用场所分为专变采集终端、集中抄表终端(包括集中器、采集器)、分布式能源监控终端等类型。

采集终端作为一种产品,从新技术研发到成熟需要经过一个过程,在这个过程中,出现终端功能需要完善、终端程序需要升级、通讯规约需要扩充更新等问题在所难免。正常情况下,采集终端在生产过程中也需要进行批量升级,国家电网为了适应现场应用对软件更新的需求,制定了相应的规约规定了软件更新过程中的数据传输规约帧格式。

用电信息采集终端应用程序的编译链接一般采用静态编译的方式。即将应用程序源代码中每个功能模块都编译链接成可执行文件,将可执行文件需要调用的对应动态链接库中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。进行采集终端升级的时候,上位机升级软件将可执行文件数据按照国家电网规约规定的数据帧格式下发给采集终端,采集终端用接收到的每一帧数据更新程序文件,数据传输完成终端重启之后就可以执行升级之后的目标文件。

但是此种编译链接及升级方法存在以下不足:

1、将软件工程中的每个功能模块代码及函数库都链接进目标文件,导致编译链接之后的目标文件太大,即使软件工程中只修改了个别功能模块的代码,也必须对所有的功能模块重新编译链接形成新的目标文件。因升级工作需要将整个目标文件下发到采集终端,目标文件过大无疑增加了每台采集终端升级的时间,大大降低了升级效率;

2、实际应用过程中,采集终端多采用GPRS进行通信,鉴于GPRS传输效率低,数据交互稳定性差、受地理位置和信号强度影响较大、数据传输流量受限等特点,若升级目标文件太大,会大大降低采集终端首次升级成功率,且耗费了过多的流量,提高了升级过程产生的费用;

3、增加了采集终端应用进程的内存开销。采集终端运行时需首先将静态编译产生的目标代码拷贝至内存,如此一来,即使程序运行过程中某部分功能代码段一直未运行,也一直占用着终端内存,造成内存资源的浪费,不能满足“按需载入”的需求;

4、无法实现进程之间的资源共享。采集终端两个甚至多个进程之间若存在共同的功能代码需要调用,则均需要在编译链接时期(Compile Time)将此代码段链接形成各自的目标文件,导致运行终端内存中存在多个重复的代码段,造成了系统资源浪费,内存开销变大;

5、采用静态编译方式产生的目标文件无法在程序中灵活控制某代码段的动态链接载入,影响了程序开发的灵活性。



技术实现要素:

本发明为了克服上述技术问题的缺点,提供了一种基于Linux动态链接库实现用电信息采集终端快速升级的方法。本发明提供一种用于解决升级目标文件过大、升级速度缓慢、升级成功率较低、耗费流量过多、内存开销过大等缺陷的用电信息采集终端快速升级的方法。

本发明的基于Linux动态链接库实现用电信息采集终端快速升级的方法,其特征在于,通过以下步骤来实现:

a).编译生成文件,将待升级软件的各功能模块编译生成动态链接库文件,将待升级软件的主线程编译生成可执行目标文件;b).整合成升级文件,通过遍历所有的动态链接库文件和可执行目标文件,将动态链接库文件和可执行目标文件的数量、文件名称、文件长度、文件偏移地址及文件CRC校验码作为配置文件信息,并将配置文件信息、动态链接库文件和可执行目标文件整合成一个升级文件;c).上位机与采集终端的交互,软件升级时,上位机首先将待升级软件的配置文件信息下发至各采集终端,采集终端通过将接收的配置文件信息与上次升级时存储的配置文件信息进行比较,确定出需要更新的文件信息并将其发送给上位机,上位机根据终端的需求有选择性地下发文件;采集终端利用上位机下发的文件进行升级。

本发明的基于Linux动态链接库实现用电信息采集终端快速升级的方法,步骤c)所述的上位机与采集终端的交互通过以下步骤来实现:

c-1).下发配置文件信息,上位机以国网公司规定的规约首帧格式将待升级软件的配置文件信息下发至各用电信息采集终端;c-2).校验配置文件信息,采集终端接收到上位机发送的配置文件信息后,将其形成临时配置文件,同时对临时配置文件的有效性和正确性进行校验,如果校验失败,则发送重传信息至上位机,以便上位机进行重新发送配置文件;如果校验通过,则执行步骤c-3);c-3).校验配置文件,采集终端通过对比本次接收的临时配置文件与上次升级时存储的配置文件中的可执行目标文件、动态链接库文件的文件名称、文件长度、文件CRC校验码,确定出本次升级需要下发的可执行目标文件和/或动态链接库文件,并将本次需要下发的文件信息作为应答消息发送至上位机,执行步骤c-4);如果本次升级不存在需要更新的文件,则回应帧中本次需要更新的文件个数为0,结束升级; c-4).下发文件,上位机接收到采集终端发送的信息后,将本次升级需要下发的可执行目标文件和/或动态链接库文件,根据配置文件中的文件偏移地址和文件长度依次下发给采集终端;c-5).形成临时文件,采集终端接收到升级文件数据后,根据临时配置文件的相关信息分别形成临时可执行目标文件和/或临时动态链接库文件;c-6).检查临时文件,采集终端检测到上位机下发的数据帧为末帧数据后,针对本次升级采集终端生成的临时可执行目标文件和/或临时动态链接库文件进行检查,如果文件出现错误,则返回出现错误的临时可执行目标文件和/或动态链接库文件信息至上位机,以便进行相关文件软件的重传;如果不存在错误,则执行步骤c-7);c-7).采集终端的升级,采集终端利用步骤c-5)形成的临时可执行目标文件和/或临时动态链接库文件对,将采集终端本地配置文件中的相应文件进行替换,采集终端重启后即完成升级。

本发明的基于Linux动态链接库实现用电信息采集终端快速升级的方法,步骤a)中,待升级软件的各功能模块、主线程通过gcc进行编译,编译选项中添加有-shared和-fPIC;在编译生成动态链接库文件过程中,通过设置名为LD_LIBRARY_PATH的环境变量并将动态链接库文件路径赋值给此变量来实现。

本发明的有益效果体现在:

(1)、可以实现进程之间的资源共享,节省了系统内存。某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的进程,看在内存里是否已有此库函数的拷贝了,如果有,则让其共享那一个拷贝,只有没有的时候才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大节省了系统的内存资源;

(2)、将一些程序的升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级;

(3)、可以真正做到链接载入完全由程序员在程序代码中控制。程序员在编写程序的时候,可以明确指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源;

(4)、可以有效避免因目标文件过大导致的升级速率缓慢、效率低下、成功率较低的缺陷,加快了升级速度,动态链接方式使得生成的目标文件或动态链接库文件比较小,利于终端升级;

(5)、将多个动态链接库文件整合成一个目标文件,有利于升级文件的拷贝和统筹管理,避免了因遗漏某个动态链接库文件导致的终端升级失败的情况出现;

(6)、减少了升级过程中对GPRS流量的消耗,降低了升级费用;

(7)、在Linux平台支持下,产生动态链接库不需要额外的工具,简单易行,易于操作;

(8)、当升级过程中传输可执行文件或动态链接库文件出现错误的时候,可以灵活实现单个文件的断点续传,简单、方便、灵活,可以实现升级文件的自动化校验及矫正。

附图说明

图1为在软件升级过程中上位机的程序流程图;

图2为在软件升级过程中用电信息采集终端的程序流程图。

具体实施方式

下面结合附图与实施例对本发明作进一步说明。

如图1所示,给出了在软件升级过程中上位机的程序流程图,图2给出了在软件升级过程中用电信息采集终端的程序流程图,其通过以下步骤来实现:

a).编译生成文件,将待升级软件的各功能模块编译生成动态链接库文件,将待升级软件的主线程编译生成可执行目标文件;

在该步骤中,待升级软件的各功能模块、主线程通过gcc进行编译,编译选项中添加有-shared和-fPIC;在编译生成动态链接库文件过程中,通过设置名为LD_LIBRARY_PATH的环境变量并将动态链接库文件路径赋值给此变量来实现。

-share选项指定生成动态链接库文件,不用该标志外部程序无法连接,相当于一个可执行目标文件;-fPIC表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的,所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。本方法生成可执行目标文件和生成链接静态库文件的编译过程相似,不同的是在链接多个静态链接库文件时需要注意各个静态链接库文件的引用顺序,否则编译不通过。而通过链接动态链接库文件生成可执行目标文件则不需要关注动态链接库文件的引用顺序,程序在程序运行时进行链接。

在程序运行期间,需要告诉系统去哪里找需要的动态链接库文件,在Linux下是通过定义名为LD_LIBRARY_PATH的环境变量来实现的,只需将路径赋值给此变量即可。这个方法可以临时改变某个应用程序的共享库查找路径,而不会影响系统中的其他程序。

b).整合成升级文件,通过遍历所有的动态链接库文件和可执行目标文件,将动态链接库文件和可执行目标文件的数量、文件名称、文件长度、文件偏移地址及文件CRC校验码作为配置文件信息,并将配置文件信息、动态链接库文件和可执行目标文件整合成一个升级文件;

该步骤中,将配置文件数据、动态链接库文件数据、可执行目标文件数据整合成一个升级文件,方便升级过程中的拷贝,防止拷贝过程中出现动态链接库文件及可执行目标文件遗漏的情况导致升级失败。整合之后的升级文件具体格式如表1所示:

表1

可见,配置文件信息包含可执行目标文件和动态链接库文件的数量、名称、长度、偏移地址和CRC校验码信息。

c).上位机与采集终端的交互,软件升级时,上位机首先将待升级软件的配置文件信息下发至各采集终端,采集终端通过将接收的配置文件信息与上次升级时存储的配置文件信息进行比较,确定出需要更新的文件信息并将其发送给上位机,上位机根据终端的需求有选择性地下发文件;采集终端利用上位机下发的文件进行升级。

该步骤,通过以下具体步骤来实现:

步骤c)所述的上位机与采集终端的交互通过以下步骤来实现:

c-1).下发配置文件信息,上位机以国网公司规定的规约首帧格式将待升级软件的配置文件信息下发至各用电信息采集终端;

c-2).校验配置文件信息,采集终端接收到上位机发送的配置文件信息后,将其形成临时配置文件,同时对临时配置文件的有效性和正确性进行校验,如果校验失败,则发送重传信息至上位机,以便上位机进行重新发送配置文件;如果校验通过,则执行步骤c-3);

c-3).校验配置文件,采集终端通过对比本次接收的临时配置文件与上次升级时存储的配置文件中的可执行目标文件、动态链接库文件的文件名称、文件长度、文件CRC校验码,确定出本次升级需要下发的可执行目标文件和/或动态链接库文件,并将本次需要下发的文件信息作为应答消息发送至上位机,执行步骤c-4);如果本次升级不存在需要更新的文件,则回应帧中本次需要更新的文件个数为0,结束升级;

c-4).下发文件,上位机接收到采集终端发送的信息后,将本次升级需要下发的可执行目标文件和/或动态链接库文件,根据配置文件中的文件偏移地址和文件长度依次下发给采集终端;

c-5).形成临时文件,采集终端接收到升级文件数据后,根据临时配置文件的相关信息分别形成临时可执行目标文件和/或临时动态链接库文件;

c-6).检查临时文件,采集终端检测到上位机下发的数据帧为末帧数据后,针对本次升级采集终端生成的临时可执行目标文件和/或临时动态链接库文件进行检查,如果文件出现错误,则返回出现错误的临时可执行目标文件和/或动态链接库文件信息至上位机,以便进行相关文件软件的重传;如果不存在错误,则执行步骤c-7);

c-7).采集终端的升级,采集终端利用步骤c-5)形成的临时可执行目标文件和/或临时动态链接库文件对,将采集终端本地配置文件中的相应文件进行替换,采集终端重启后即完成升级。

本发明的采集终端的升级方法,借鉴动态链接库的实现及模块化的编程思想,设计过程中尽可能保证软件工程中每个功能模块高内聚,功能模块与功能模块之间低耦合的特点,编译链接的时候将软件工程中每个功能模块均编译生成一个动态链接库文件,只将主线程实现文件编译链接形成目标文件,将调用函数的链接载入由编译时期推迟至程序运行时按需载入。进行软件升级的时候,只需要升级动态链接库,且只要更新发生变更的动态链接库文件即可完成整个软件工程的升级。

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