发明内容
本发明的主要目的在于提供一种光模块程序升级方法、装置、设备及可读存储介质,旨在解决现有技术中对光模块程序进行升级会导致业务中断的技术问题。
第一方面,本发明提供一种光模块程序升级方法,所述光模块程序升级方法包括:
接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;
当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;
暂停或关闭与所述待升级程序相关联的任务;
将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;
控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。
可选的,在所述控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务的步骤之后,还包括:
基于所述新的符号表文件数据,完成光模块程序对指定程序数据的调用。
可选的,所述基于所述新的符号表文件数据,完成光模块程序对指定程序数据的调用的步骤包括:
光模块程序请求调用指定程序数据时,基于所述新的符号表文件数据,查找所述指定程序数据的存储地址,基于所述存储地址完成光模块程序对所述指定程序数据的调用。
可选的,在所述将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间的步骤之后,还包括:
记录光模块的状态信息;
在所述将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间的步骤之后,还包括:
基于所述状态信息,恢复线程的状态机信息。
可选的,所述状态信息包括:外设状态信息、操作系统信息、线程状态机信息、全局变量及控制字段信息。
第二方面,本发明还提供一种光模块程序升级装置,所述光模块程序升级装置包括:
接收模块,用于接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;
第一处理模块,用于当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;
第二处理模块,用于暂停或关闭与所述待升级程序相关联的任务;
写入模块,用于将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;
第三处理模块,用于控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。
可选的,所述光模块程序升级装置还包括调用模块,用于:
基于所述新的符号表文件数据,完成光模块程序对指定程序数据的调用。
可选的,所述调用模块,用于:
光模块程序请求调用指定程序数据时,基于所述新的符号表文件数据,查找所述指定程序数据的存储地址,基于所述存储地址完成光模块程序对所述指定程序数据的调用。
第三方面,本发明还提供一种光模块程序升级设备,所述光模块程序升级设备包括处理器、存储器、以及存储在所述存储器上并可被所述处理器执行的光模块程序升级程序,其中所述光模块程序升级程序被所述处理器执行时,实现如上所述的光模块程序升级方法的步骤。
第四方面,本发明还提供一种可读存储介质,所述可读存储介质上存储有光模块程序升级程序,其中所述光模块程序升级程序被处理器执行时,实现如上所述的光模块程序升级方法的步骤。
本发明中,接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;暂停或关闭与所述待升级程序相关联的任务;将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。通过本实施例,对光模块程序中的子程序进行升级时,仅需将待升级程序的新的程序数据以及新的符号表文件数据覆盖写入对应的地址区间,无需重启控制器MCU以及对应的器件,从而实现升级期间光模块业务不中断。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
第一方面,本发明实施例提供一种光模块程序升级设备。
参照图2,图2为本发明实施例方案中涉及的光模块程序升级设备的硬件结构示意图。本发明实施例中,光模块程序升级设备可以包括处理器1001(例如中央处理器CentralProcessing Unit,CPU),通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信;用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard);网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真WIreless-FIdelity,WI-FI接口);存储器1005可以是高速随机存取存储器(random access memory,RAM),也可以是稳定的存储器(non-volatile memory),例如磁盘存储器,存储器1005可选的还可以是独立于前述处理器1001的存储装置。本领域技术人员可以理解,图2中示出的硬件结构并不构成对本发明的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
继续参照图2,图2中作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及光模块程序升级程序。其中,处理器1001可以调用存储器1005中存储的光模块程序升级程序,并执行本发明实施例提供的光模块程序升级方法。
第二方面,本发明实施例提供了一种光模块程序升级方法。
参照图3,图3为本发明光模块程序升级方法一实施例的流程示意图。如图3所示,光模块程序升级方法包括:
步骤S10,接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;
本实施例中,光模块程序即控制器MCU程序,光模块程序包含多个子程序,例如DSP固件驱动程序、DSP状态机控制程序、光器件固件驱动程序、光器件启动配置和监测程序、数字电源配置和监测程序、状态告警监测和上报程序等等。以对DSP固件驱动程序进行升级为例,则接收的升级数据包中包含DSP固件驱动程序的新的程序数据以及新的符号表文件数据。其中,新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址,程序数据包括函数、数据结构等。
步骤S20,当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;
本实施例中,在收到待升级程序的新的程序数据后,若待升级程序在执行任务,则等待任务执行完成后,待升级程序进入保持状态,在保持状态下,待升级程序不再响应任务指令,并冻结光模块程序的操作系统调度。例如,以待升级程序为DSP固件驱动程序为例,若DSP固件驱动程序在执行任务,则等待任务执行完成后,配置DSP HOLD寄存器,使DSP置于HOLD模式,此时DSP固件驱动程序不再响应任务指令,同时冻结光模块程序的操作系统调度。
步骤S30,暂停或关闭与所述待升级程序相关联的任务;
本实施例中,若与待升级程序有调用关系、依赖关系等相关联的任务在执行,则暂停或关闭这些任务。
步骤S40,将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;
本实施例中,在程序编译阶段,便已确定了程序所对应的存储地址区间,在此基础上,可直接将新的程序数据覆盖写入待升级程序所对应的地址区间,即以新的程序数据替换了原先的程序数据。且,在程序编译阶段,通过提取函数名、函数地址、数据结构名、数据结构地址等信息,生成标准格式的符号表文件,然后将符号表文件写入符号表文件所对应的地址区间。后续,当需要对待升级程序的程序数据更新时,基于待升级程序的新的程序数据以及其他子程序的程序数据,生成新的符号表文件,并将新的符号表文件覆盖写入符号表文件所对应的地址区间,即以新的符号表文件数据替换原有的符号表文件数据。其中,“将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间”与“将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间”执行顺序不作限制,可以是先将新的程序数据覆盖写入,再将新的符号表文件数据覆盖写入;或是,先将新的符号表文件数据覆盖写入,再将新的程序数据覆盖写入;或是,同步进行新的符号表文件数据覆盖写入以及新的程序数据覆盖写入。
步骤S50,控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。
本实施例中,基于步骤S40,程序数据更新以及符号表文件数据更新的动作已经执行完毕,则控制待升级程序退出保持状态,恢复光模块程序的操作系统调度,并重启步骤S30中暂停或关闭的任务。
本实施例中,接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;暂停或关闭与所述待升级程序相关联的任务;将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。通过本实施例,对光模块程序中的子程序进行升级时,仅需将待升级程序的新的程序数据以及新的符号表文件数据覆盖写入对应的地址区间,无需重启控制器MCU以及对应的器件,从而实现升级期间光模块业务不中断。
进一步地,一实施例中,在步骤S50之后,还包括:
步骤S60,基于所述新的符号表文件数据,完成光模块程序对指定程序数据的调用。
本实施例中,新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址,用于待升级程序基于新的符号表文件数据调用新的程序数据,同样用于其他子程序基于新的符号表文件数据调用其对应的程序数据。其中,程序数据包括函数、数据结构等。运用符号表技术,可以使光模块程序(即控制器MCU程序)的调度执行方式从传统的基于函数、数据结构地址进行调度转变为基于符号表进行调度。传统的基于地址的调度方式,函数和数据结构地址在光模块程序编译阶段就已经固化,光模块程序通过固定的地址去查找调用函数和数据结构。而基于符号表的调度方式,使光模块程序不再直接通过地址查找调用函数和数据结构,而是基于符号表查找函数名或数据结构名,间接确定其地址,从而实现函数和数据结构的调用。传统调度方式和符号表调度方式的对比示例图如图4所示。
进一步地,一实施例中,步骤S60包括:
光模块程序请求调用指定程序数据时,基于所述新的符号表文件数据,查找所述指定程序数据的存储地址,基于所述存储地址完成光模块程序对所述指定程序数据的调用。
本实施例中,光模块程序请求调用指定程序数据时,例如指定函数、数据结构时,基于符号表查找指定函数的函数名、指定数据结构的数据结构名,确定指定函数、数据结构的存储地址,从而基于存储地址实现对指定函数、数据结构的调用。参照图5,图5为本发明光模块程序升级方法一实施例中基于符号表调用函数或数据结构的示意图。
进一步地,一实施例中,在步骤S20之后,还包括:
记录光模块的状态信息;
在步骤S40之后,还包括:
基于所述状态信息,恢复线程的状态机信息。
本实施例中,在步骤S20之后,还需要记录光模块的状态信息,并在符号表文件数据以及待升级程序的程序数据更新完成后,基于记录的状态信息,恢复线程的状态机信息。其中,状态信息包括:外设状态信息、操作系统信息、线程状态机信息、全局变量及控制字段信息。容易理解的是,状态信息所包含的具体内容可以根据实际需要进行扩增或缩减。
参照图6,图6为本发明光模块程序升级方法另一实施例的流程示意图。如图6所示,光模块程序升级方法涉及两个阶段:初始化阶段;热补丁阶段。
其中,初始化阶段包含:
1、符号表初始化:读取并校验符号表文件数据的完整性和版本是否匹配,然后解析符号表文件数据,获取函数名、函数地址、数据结构名、数据结构地址等有效信息,完成符号表管理部件的初始化;
2、模块软件初始化:光模块程序自身的初始化及运行,所有的函数调度和数据结构的引用均基于符号表管理部件进行,使模块初始化正常;
3、基于符号表的程序调度:基于符号表管理部件,启动系统调度,模块进入正常工作状态。
热补丁阶段包含:
1、收到在线升级指令:接收主机升级命令,获取升级信息,启动模块升级任务;
2、接收在线升级数据包:基于标准协议完成数据包的传输和校验,升级数据包包含新的目标程序数据及新的符号表文件数据;
3、目标程序进入保持状态,冻结系统调度。
4、保存当前状态:保存模块当前必要关键信息,如:外设当前状态、操作系统信息、线程状态机信息、必要的全局变量及控制字信息;
5、暂停或关闭与目标程序有关联的任务:暂停或关闭程序中与目标程序有调用关系、依赖关系等相关联的任务;
6、更新目标程序区域数据:根据步骤2接收到的升级数据,将升级数据覆盖写入目标程序所在地址区间,并进行回读校验,实现目标程序区域数据的更新;
7、重新初始化符号表:根据步骤2接收到的升级数据,将新的符号表文件数据写入符号表文件所在的地址区间,并进行回读校验,然后用新的符号表文件数据重新初始化符号表管理部件;
8、重启与目标程序有关联的任务:重新启动步骤5中暂停或关闭的与目标程序有关联的任务;
9、恢复线程状态机信息:根据步骤4保存的模块当前状态信息,如外设当前状态、操作系统信息、线程状态及信息、全局变量和控制字信息等,恢复线程的状态机信息;
10、恢复系统调度:退出保持阶段,恢复操作系统调度,热补丁完成。
参照图7,图7为一实施例中对DSP固件驱动程序进行升级的流程示意图。如图7所示,对DSP固件驱动程序进行升级的流程包括:
1、收到在线升级指令:接收主机升级命令,获取升级信息,启动模块升级任务;
2、接收在线升级数据包:基于标准协议完成数据包的传输和校验,升级数据包包含新的DSP固件驱动程序数据及新的符号表文件数据;
3、等待DSP任务进入就绪态;
4、配置DSP HOLD寄存器,使DSP进入HOLD模式;
5、保存DSP任务及关联任务的当前状态;
6、关闭DSP任务,暂停DSP关联任务;
7、更新DSP固件区域数据;
8、重新初始化符号表;
9、重启DSP任务,恢复DSP关联任务;
10、恢复线程状态机信息;
11、恢复系统调度。
第三方面,本发明实施例还提供一种光模块程序升级装置。
参照图8,图8为本发明光模块程序升级装置一实施例的功能模块示意图。如图8所示,光模块程序升级装置包括:
接收模块10,用于接收升级数据包,所述升级数据包包括待升级程序的新的程序数据以及新的符号表文件数据,所述待升级程序为光模块程序包含的若干子程序中的至少一个子程序,所述新的符号表文件数据包括新的程序数据的数据名和存储地址以及其他子程序的程序数据的数据名和存储地址;
第一处理模块20,用于当所述待升级程序进入保持状态,冻结光模块程序的操作系统调度;
第二处理模块30,用于暂停或关闭与所述待升级程序相关联的任务;
写入模块40,用于将所述新的程序数据覆盖写入所述待升级程序所对应的地址区间,将所述新的符号表文件数据覆盖写入符号表文件所对应的地址区间;
第三处理模块50,用于控制所述待升级程序退出所述保持状态,恢复所述光模块程序的操作系统调度,并重启所述任务。
进一步地,一实施例中,所述光模块程序升级装置还包括调用模块,用于:
基于所述新的符号表文件数据,完成光模块程序对指定程序数据的调用。
进一步地,一实施例中,调用模块,用于:
光模块程序请求调用指定程序数据时,基于所述新的符号表文件数据,查找所述指定程序数据的存储地址,基于所述存储地址完成光模块程序对所述指定程序数据的调用。
进一步地,一实施例中,所述光模块程序升级装置还包括记录模块以及第四处理模块,记录模块,用于:
记录光模块的状态信息;
第四处理模块,用于:
基于所述状态信息,恢复线程的状态机信息。
进一步地,一实施例中,所述状态信息包括:外设状态信息、操作系统信息、线程状态机信息、全局变量及控制字段信息。
其中,上述光模块程序升级装置中各个模块的功能实现与上述光模块程序升级方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。
第四方面,本发明实施例还提供一种可读存储介质。
本发明可读存储介质上存储有光模块程序升级程序,其中所述光模块程序升级程序被处理器执行时,实现如上述的光模块程序升级方法的步骤。
其中,光模块程序升级程序被执行时所实现的方法可参照本发明光模块程序升级方法的各个实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。