一种光模块固件升级的方法及装置的制造方法

文档序号:10724618阅读:560来源:国知局
一种光模块固件升级的方法及装置的制造方法
【专利摘要】本发明公开了一种光模块固件升级的方法及装置,该方法包括虚拟Bootloader在光模块运行中通过获取BootFlag被置位的通知,然后读取程序签名标识值,若程序签名标识值为第一程序区的签名,则虚拟Bootloader将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区,跳转至第二程序区,运行第二程序区中的固件代码。通过使用虚拟Bootloader对光模块进行固件升级,实现在光模块固件升级的过程中可以保持通信业务,通过读取程序签名区的标识值,来确定当前正在运行的程序区,可以保证光模块在固件升级中始终能运行正常,避免因通信异常、外界突然断电等因素导致固件升级失败。
【专利说明】
一种光模块固件升级的方法及装置
技术领域
[0001]本发明实施例涉及光通信技术领域,尤其涉及一种光模块固件升级的方法及装置。
【背景技术】
[0002]光收发一体模块,简称光模块,是用于光通讯领域的设备中的一种标准模块。此模块一般作为光路由器等设备的一种标准配件。近年来,随着用户对带宽的要求越来越高,光纤到户的普及等,光模块市场突飞猛进。随着行业的发展,光模块越来越往智能化方向发展,内部带有一个单片机的光模块越来越多。光模块产品一般都支持系统在线升级功能,这种功能在确保不操作任何硬件器件的前提下,仅通过软件的办法进行光模块的版本更新和BUG修复,极大程度方便通信设备运营商的后台维护和管理,是光模块中非常重要的一个功會K。
[0003]目前传统光模块产品固件升级方法为发送相关命令使光模块复位重启,复位后的光模块直接跳转到单片机内嵌的Bootloader (启动加载)区域,在Bootloader代码中将新的固件代码覆盖原有固件代码,当新固件完全更新完毕后跳转到应用程序区或复位单片机使其跳转到应用程序区。
[0004]此种方法在升级固件代码中,因涉及单片机的复位和跳转到Bootloader,会丢失光模块的部分状态和控制信息,例如DAC输出电压无法正常保持、GP1 口输出状态无法保持等,这种丢失使光模块无法正常工作,严重的会出现漏光,导致通信业务出现短暂中断。

【发明内容】

[0005]本发明实施例提供一种光模块固件升级的方法及装置,用以实现无需重启光模块,从而保持光模块通信业务不中断的情况下进行固件升级。
[0006]本发明实施例提供的一种光模块固件升级的方法,包括:
[0007]虚拟Bootloader在光模块运行中获取BootFlag(启动标识)被置位的通知,BootFlag被置位的通知中包括固件升级代码;
[0008]虚拟Bootloader读取程序签名标识值;
[0009]若程序签名标识值为第一程序区的签名,则虚拟Bootloader将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区,其中,第一程序区存储有当前控制光模块运行的固件代码,第一程序区和第二程序区位于光模块的存储空间内;
[0010]虚拟Bootloader跳转至第二程序区,运行第二程序区中的固件代码,通过第二程序区中的固件代码控制光模块的运行。
[0011]相应地,本发明实施例还提供了一种光模块固件升级的装置,包括:
[0012]获取单元,用于在光模块运行中获取启动标识BootFlag被置位的通知,BootFlag被置位的通知中包括固件升级代码;
[0013]读取单元,用于读取程序签名标识值;
[0014]处理单元,用于若程序签名标识值为第一程序区的签名,则将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区,其中,第一程序区存储有当前控制光模块运行的固件代码,第一程序区和第二程序区位于光模块的存储空间内;以及跳转至第二程序区,运行第二程序区中的固件代码,通过第二程序区中的固件代码控制光模块的运行。
[0015]本发明实施例表明,虚拟Bootloader在光模块运行中通过获取BootFlag被置位的通知,然后读取程序签名标识值,若程序签名标识值为第一程序区的签名,则虚拟 Bootloader将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区,跳转至第二程序区,运行第二程序区中的固件代码,通过第二程序区中的固件代码控制光模块的运行。通过使用位于存储空间内的虚拟Bootloader对光模块进行固件升级,可以实现在光模块固件升级的过程中可以保持通信业务,在进行固件代码升级时,通过读取程序签名标识值,来确定当前正在运行的程序区,从而避开该正在运行的程序区,对没有运行的程序区进行固件升级,并在升级之后运行该升级之后的程序区中的固件代码,使得通过新的固件代码控制光模块的运行,在下一次固件升级时对另一个程序区进行升级。可以保证光模块在固件升级中始终能运行正常,避免因通信异常、外界突然断电等因素导致固件升级失败。【附图说明】
[0016]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0017]图1为本发明实施例中提供的一种适用于光模块固件升级的系统架构;
[0018]图2为本发明实施例中提供的一种光模块上电的流程示意图;
[0019]图3为本发明实施例中提供的一种光模块的内核Bootloader运行的流程示意图;
[0020]图4为本发明实施例中提供的一种光模块固件升级的方法的流程示意图;
[0021]图5为本发明实施例中提供的一种光模块运行的流程示意图;
[0022]图6为本发明实施例中提供的一种光模块固件升级的流程示意图;
[0023]图7为本发明实施例中提供的一种光模块固件升级的装置的结构示意图。【具体实施方式】[〇〇24]为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0025]在本发明实施例中,图1示出了适用于本发明实施例的光模块的架构,该光模块的微处理器中存在内核Bootloader区,以及设置在存储空间的虚拟Bootloader区(B1),程序签名区(B2),第一程序区(AA),第二程序区(BB),第三程序区(CC)。内核Bootloader区中存储有引导程序,该内核Boot loader区需要在光模块复位时通过特殊操作才可以进入,正常上电过程无法进入该内核Boot loader区。虚拟Boot loader区中存储有与内核Boot loader区中相同的引导程序,用于选择需要运行或者升级的程序区,并加载需要运行的程序区或对需要升级的程序区进行升级。程序签名区用于存储程序签名标识值,该程序签名标识值用于标识正在运行的程序区。第一程序区和第二程序区都存储有控制光模块运行的固件代码,第三程序区存储有光模块出厂时默认的控制光模块运行的固件代码,该第三程序区无法被擦写,被设置有写保护。
[0026]如图2所示,在光模块上电运行的具体步骤包括:[〇〇27]步骤201,上电。光模块上电,开始启动。[〇〇28]步骤202,判断是否需要进入内核Bootloader,若是,则转入步骤205,若否,则转入步骤203。若是初次光模块上电,此时,存储空间内各个区域为空白,需要进行特殊操作进入内核Bootloader,来运行内核Boot loader中的引导程序。
[0029]步骤203,进入虚拟Bootloader区域。[〇〇30]步骤204,进入虚拟Bootloader流程,运行虚拟Bootloader中的引导程序。[〇〇31 ]步骤205,进入内核Boot loader流程,运行内核Boot loader中的引导程序。[0〇32]当光模块初始化阶段时,需要进入内核Bootloader区,运行内核Bootloader中的引导程序,模块上电后经过特殊操作强行进入内嵌的BootLoader区,因程序区的签名为空, 故将虚拟BootLoader区对应的程序和控制光模块运行的程序分别下载至虚拟BootLoader 区、第一程序区(AA区)或第二程序区(BB区)、第三程序区(CC块,厂家默认程序),并将程序区签名设置为“AA区的签名或BB区的签名”,最后跳转到AA去或BB区运行正常的应用程序。 具体步骤如图3所示:
[0033]步骤2051,运行内核Bootloader中的引导程序。[〇〇34] 步骤20 52,下载虚拟Boot loader区对应的程序,并将该程序写入该虚拟 Bootloader区中。[〇〇35]步骤2053,判断程序签名区的程序签名标识值是否为第一程序区的签名,若是,则转入步骤2054,否则,转入步骤2056。[〇〇36]步骤2054,下载第二程序区的固件代码,并写入第二程序区,在写入完成之后,将程序签名区的程序签名标识值设置为第二程序区的签名。[〇〇37]步骤2055,跳转到虚拟Bootloader区,运行引导程序,控制第一程序区或第二程序区中的程序运行。[〇〇38]步骤2056,下载第一程序区的固件代码,并写入第一程序区,在写入完成之后,将程序签名区的程序签名标识值设置为第一程序区的签名。[〇〇39] 基于上述描述,在通过虚拟Bootloader控制第一程序区或第二程序区中的程序运行时,若收到固件升级的指令,则需要对光模块的固件进行升级。图4示出了本发明实施例提供的一种光模块固件升级的流程,该流程可以由光模块固件升级的装置执行,该装置可以位于光模块内的微处理器中,也可以是该微处理器。
[0040]如图4所示,该流程的具体步骤包括:[0〇41 ]步骤401,虚拟Bootloader在光模块运行中获取BootFlag被置位的通知。[0〇42]步骤402,虚拟Bootloader读取程序签名标识值。[〇〇43]步骤403,若程序签名标识值为第一程序区的签名,则虚拟Bootloader将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区;[〇〇44]步骤404,虚拟Bootloader跳转至第二程序区,运行第二程序区中的固件代码。
[0045]在本发明实施例中,若上述程序签名标识值为第二程序区的签名,则虚拟 Bootloader将第一程序区擦除,并将固件升级代码写入擦除之后的第一程序区。[〇〇46]在本发明实施例中,该BootFlag被置位的通知中包括固件升级代码,用于对光模块中的固件进行升级。该BootFlag被置位的通知是在光模块接收到固件升级指令且将 BootFlag置位之后获取的。该BootFlag被置位是指将BootFlag的值设置为1,将BootFlag的值设置为〇,表示BootFlag被复位。虚拟Bootloader在光模块运行中获取BootFlag被置位的通知之后,还需要将BootFlag复位。该BootFlag的值的设置仅是示例作用,对此不做限制。 上述程序签名标识值存储于光模块的存储空间内的程序签名区。[〇〇47] 虚拟Bootloader读取程序签名区的程序签名标识值为第一程序区时,将第二程序区中的固件代码擦除,并将上述固件升级代码写入擦除之后的第二程序区,该第一程序区中存储有当前控制光模块运行的固件代码,此时在对第二程序区中的固件代码进行升级的过程中,第一程序区中的固件代码正在运行,正在控制光模块的运行,并不需要光模块停止运行就可以完成对应固件代码的升级。并且将在对第二程序区中的固件代码升级完成之后,虚拟Bootloader跳转到该升级完成的第二程序区,运行升级之后的固件代码,通过新的固件代码来控制光模块的运行,保证了固件升级过程中光模块运行不中断。
[0048]其中,在跳转到第二程序区之前,还需要将程序签名区的程序签名标识值修改为第二程序区的签名,以保证通过读取程序签名区的程序签名标识值来运行第二程序区的固件代码,即运行新的固件代码控制光模块的运行。
[0049]在对第二程序区中的固件代码升级完成之后,如果光模块重新上电,则虚拟 Bootloader确定光模块开始上电且BootFlag未被置位,虚拟Bootloader读取所述程序签名标识值,此时程序签名标识值为第二程序区的签名,虚拟Bootloader启动该第二程序区存储的程序,以控制光模块的运行,该第二程序区存储有升级之后控制光模块运行的固件代码。
[0050]为了更好的解释本发明实施例,下面将在具体的实施场景下,描述本发明实施例中光模块固件升级的流程。[0〇51 ]在本发明实施例中,如图5所示的虚拟Bootloader运行的流程图,该流程具体步骤包括:[〇〇52]步骤501,光模块开始上电。[〇〇53] 步骤502,虚拟Bootloader判断BootFlag是否等于0,若是则转入步骤503,若否在转入步骤509。[〇〇54]步骤503,判断程序签名区的标识值是否为AA区程序签名,若是,则转入步骤504, 若否,则转入步骤505。[〇〇55] 步骤504,跳转到AA区运行AA区中的程序。[〇〇56]步骤505,判断程序签名区的标识值是否为BB区程序签名,若是,则转入步骤506, 若否,则转入步骤507。[〇〇57] 步骤506,跳转到BB区运行BB区中的程序。[〇〇58] 步骤507,跳转到CC区运行CC区中的程序。[〇〇59]步骤508,运行程序控制光模块的运行,在光模块的运行过程中,若收到需要固件升级的指令,则将BootFlag置位,并跳转到步骤502。
[0060]步骤509,进入固件升级流程。[〇〇61]光模块固件升级的流程具体如图6所示的光模块固件升级的流程图,该流程具体包括:
[0062]步骤601,获取固件升级指令,该固件升级指令中包括有固件升级代码。[〇〇63] 步骤602,将BootFlag置位,比如将BootFlag的值设置为1。
[0064] 步骤603,跳转到虚拟Boot loader区,虚拟Boot loader运行引导程序。[0〇65] 步骤604,虚拟Boot loader判断BootFlag的值是否为1。若是则转入步骤605,若否, 则转入步骤611。[〇〇66] 步骤605,虚拟Bootloader将BootFlag复位,比如将BootFlag的值设置为0。[〇〇67]步骤606,判断程序签名区的程序签名标识值是否为AA区的签名,若是,则转入步骤607,若否,则转入步骤609。[〇〇68] 步骤607,擦除BB区中的固件代码,在BB区写入固件升级代码,并将程序签名区中的程序签名标识值设置为BB区的签名。[〇〇69] 步骤608,跳转到BB区,运行BB区中升级之后的固件代码。[〇〇7〇] 步骤609,擦除AA区中的固件代码,在AA区写入固件升级代码,并将程序签名区中的程序签名标识值设置为AA区的签名。
[0071]步骤610,跳转到AA区,运行AA区中升级之后的固件代码。
[0072]步骤611,判断程序签名区的程序签名标识值是否为AA区的签名,若是,则转入步骤612,若否,则转入步骤613。[〇〇73] 步骤612,跳转到AA区,运行AA区中升级之后的固件代码。[〇〇74]步骤613,判断程序签名区的程序签名标识值是否为BB区的签名,若是,则转入步骤614,若否,则转入步骤615。[〇〇75] 步骤614,跳转到BB区,运行BB区中升级之后的固件代码。[〇〇76]步骤615,跳转到CC区,运行CC区中升级之后的固件代码。[〇〇77] 上述发明实施例表明,虚拟Bootloader在光模块运行中通过获取BootFlag被置位的通知,然后读取程序签名标识值,若程序签名标识值为第一程序区的签名,则虚拟 Bootloader将第二程序区擦除,并将固件升级代码写入擦除之后的第二程序区,跳转至第二程序区,运行第二程序区中的固件代码,通过第二程序区中的固件代码控制光模块的运行。通过使用位于存储空间内的虚拟Bootloader对光模块进行固件升级,可以实现在光模块固件升级的过程中可以保持通信业务,在进行固件代码升级时,通过读取程序签名区的标识值,来确定当前正在运行的程序区,从而避开该正在运行的程序区,对没有运行的程序区进行固件升级,并在升级之后运行该升级之后的程序区中的固件代码,使得通过新的固件代码控制光模块的运行,在下一次固件升级时对另一个程序区进行升级。可以保证光模块在固件升级中始终能运行正常,避免因通信异常、外界突然断电等因素导致固件升级失败。
[0078]基于相同的技术构思,图7示出了本发明实施例提供的一种光模块固件升级的装置的结构,该装置可以执行光模块固件升级的流程,该装置可以是光模块内的微处理器,该装置也可以位于所述微处理器内。[0〇79] 如图7所示,该装置具体包括包括:
[0080]获取单元701,用于在光模块运行中获取BootFlag被置位的通知,所述BootFlag被置位的通知中包括固件升级代码;[0081 ]读取单元702,用于读取程序签名标识值;[〇〇82]处理单元703,用于若所述程序签名标识值为第一程序区的签名,则将第二程序区擦除,并将所述固件升级代码写入所述擦除之后的第二程序区,其中,所述第一程序区存储有当前控制光模块运行的固件代码,所述第一程序区和所述第二程序区位于所述光模块的存储空间内;以及跳转至所述第二程序区,运行所述第二程序区中的固件代码,通过所述第二程序区中的固件代码控制光模块的运行。[〇〇83] 优选地,所述处理单元703还用于:
[0084]在跳转至所述第二程序区之前,将所述程序签名标识值修改为第二程序区的签名。[〇〇85]优选地,所述BootFlag被置位的通知是在所述光模块接收到光模块固件升级指令且将所述BootFlag置位之后获取的。[〇〇86] 优选地,还包括:复位单元(未示出),用于在获取BootFlag被置位的通知之后,将所述BootFlag复位。[〇〇87] 优选地,所述处理单元703还用于:[0〇88]确定所述光模块开始上电且所述BootFlag未被置位,则通知所述读取单元读取所述程序签名标识值;若所述程序签名标识值为第二程序区的签名,则启动所述第二程序区存储的固件代码,以控制所述光模块的运行,所述第二程序区存储有控制所述光模块运行的固件代码,所述程序签名标识值存储于所述光模块的存储空间内的程序签名区。[〇〇89]优选地,所述光模块还包括内核Bootloader以及位于所述光模块的存储空间内的虚拟Bootloader区和第三程序区;
[0090]所述处理单元703还用于:
[0091]在所述光模块初始化时,分别将虚拟Bootloader区的程序、第一程序区的固件代码、第三程序区的固件代码写入所述虚拟Bootloader区、所述第一程序区、所述第三程序区,并将所述程序签名标识值设置为第一程序区的签名,其中,所述第三程序区为默认的控制光模块运行的固件代码。[〇〇92] 优选地,所述处理单元703还用于:
[0093]在所述程序签名标识值为空时,启动所述第三程序区存储的固件代码,以控制所述光模块的运行。
[0094]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0095]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0096]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[〇〇97]尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0098]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【主权项】
1.一种光模块固件升级的方法,其特征在于,包括: 虚拟Bootloader在光模块运行中获取启动标识BootFlag被置位的通知,所述BootFlag被置位的通知中包括固件升级代码; 所述虚拟Bootloader读取程序签名标识值; 若所述程序签名标识值为第一程序区的签名,则所述虚拟Bootloader将第二程序区擦除,并将所述固件升级代码写入所述擦除之后的第二程序区,其中,所述第一程序区存储有当前控制光模块运行的固件代码,所述第一程序区和所述第二程序区位于所述光模块的存储空间内; 所述虚拟Bootloader跳转至所述第二程序区,运行所述第二程序区中的固件代码,通过所述第二程序区中的固件代码控制光模块的运行。2.如权利要求1所述的方法,其特征在于,在所述虚拟Bootloader跳转至所述第二程序区之前,还包括: 所述虚拟Bootloader将所述程序签名标识值修改为第二程序区的签名。3.如权利要求1所述的方法,其特征在于,所述BootFlag被置位的通知是在所述光模块接收到光模块固件升级指令且将所述BootFlag置位之后获取的。4.如权利要求1至3任一项所述的方法,其特征在于,还包括: 所述虚拟Bootloader确定所述光模块开始上电且所述BootFlag未被置位,则所述虚拟Bootloader读取所述程序签名标识值;若所述程序签名标识值为第二程序区的签名,则所述虚拟Bootloader启动所述第二程序区存储的固件代码,以控制所述光模块的运行,所述第二程序区存储有控制所述光模块运行的固件代码,所述程序签名标识值存储于所述光模块的存储空间内的程序签名区。5.如权利要求1至3任一项所述的方法,其特征在于,所述光模块还包括内核Bootloader以及位于所述光模块的存储空间内的虚拟Bootloader区和第三程序区; 所述方法还包括: 在所述光模块初始化时,所述内核Boot loader分别将虚拟Boot loader区的程序、第一程序区的固件代码、第三程序区的固件代码写入所述虚拟Bootloader区、所述第一程序区、所述第三程序区,并将所述程序签名标识值设置为第一程序区的签名,其中,所述第三程序区为默认的控制光模块运行的固件代码。6.一种光模块固件升级的装置,其特征在于,包括: 获取单元,用于在光模块运行中获取启动标识BootFlag被置位的通知,所述BootFlag被置位的通知中包括固件升级代码; 读取单元,用于读取程序签名标识值; 处理单元,用于若所述程序签名标识值为第一程序区的签名,则将第二程序区擦除,并将所述固件升级代码写入所述擦除之后的第二程序区,其中,所述第一程序区存储有当前控制光模块运行的固件代码,所述第一程序区和所述第二程序区位于所述光模块的存储空间内;以及跳转至所述第二程序区,运行所述第二程序区中的固件代码,通过所述第二程序区中的固件代码控制光模块的运行。7.如权利要求6所述的装置,其特征在于,所述处理单元还用于: 在跳转至所述第二程序区之前,将所述程序签名标识值修改为第二程序区的签名。8.如权利要求8所述的装置,其特征在于,所述BootFlag被置位的通知是在所述光模块接收到光模块固件升级指令且将所述BootFlag置位之后获取的。9.如权利要求6至8任一项所述的装置,其特征在于,所述处理单元还用于: 确定所述光模块开始上电且所述BootFlag未被置位,则通知所述读取单元读取所述程序签名标识值;若所述程序签名标识值为第二程序区的签名,则启动所述第二程序区存储的程序,以控制所述光模块的运行,所述第二程序区存储有控制所述光模块运行的程序,所述程序签名标识值存储于所述光模块的存储空间内的程序签名区。10.如权利要求6至8任一项所述的装置,其特征在于,所述光模块还包括内核Bootloader以及位于所述光模块的存储空间内的虚拟Bootloader区和第三程序区; 所述处理单元还用于: 在所述光模块初始化时,分别将虚拟Bootloader区的程序、第一程序区的固件代码、第三程序区的固件代码写入所述虚拟Bootloader区、所述第一程序区、所述第三程序区,并将所述程序签名标识值设置为第一程序区的签名,其中,所述第三程序区为默认的控制光模块运行的固件代码。
【文档编号】G06F9/445GK106095480SQ201610378049
【公开日】2016年11月9日
【申请日】2016年5月31日
【发明人】王文希, 李刚, 林青合
【申请人】青岛海信宽带多媒体技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1