基于arm的固件升级方法和装置制造方法

文档序号:6491985阅读:448来源:国知局
基于arm的固件升级方法和装置制造方法
【专利摘要】本发明提出基于ARM的固件升级方法,包括步骤:将ARM片内FLASH划分为用户代码分区1和用户代码分区2;将初始固件导入到用户代码分区1,执行用户代码分区1中的固件;获取新版本的固件导入外部存储器;在外部存储器中,设置各用户固件备份区的升级标志;检测外部存储器中的升级标志,当需要升级时,则将需升级的固件,更新到用户代码分区2,并设置用户代码分区2在升级过程中的相关信息;检测相关信息,当需要跳转执行用户代码分区2中的固件时,则执行用户代码分区2中的固件;否则,继续执行用户代码分区1中的固件。本发明还提出基于ARM的固件升级装置,可以在系统运行过程中完成固件升级,可以提供连续的服务。
【专利说明】基于ARM的固件升级方法和装置
【技术领域】
[0001]本发明涉及嵌入式系统应用领域,特别是涉及基于ARM的固件升级方法和装置。【背景技术】
[0002]目前嵌入式系统应用相关技术取得了突飞猛进的发展,嵌入式应用已经深入到工业控制、通信、消费类电子、信息家电等领域,同时ARM芯片由于其突出的低功耗、高性能、应用范围广泛等特点在嵌入式系统中得到广泛的应用。为了能够应付客户需求的变化,为现有产品提供新的功能或修正原有系统存在的问题,以延长原有产品的生命周期,降低维护保养费用,所设计的嵌入式系统支持固件升级是必不可少的。在很多嵌入式应用场合,由于所使用的设备正在承担关键的职能,不能因为固件升级过程而停止该设备的使用。
[0003]目前的固件升级方法,固件升级完毕,需要对固件系统进行复位后,才能继续工作,不能提供连续的服务。

【发明内容】

[0004]本发明的目的在于提出基于ARM的固件升级方法,可以在系统运行过程中完成固件升级,可以提供连续的服务,可靠性高。
[0005]为达到上述目的,采用的技术方案是:
[0006]基于ARM的固件升级方法,包括步骤:
[0007]将ARM片内FLASH划分为用户代码分区I和用户代码分区2 ;
[0008]将初始固件导入到所述用户代码分区1,执行用户代码分区I中的固件;
[0009]获取新版本的固件,并导入外部存储器;
[0010]在所述外部存储器中,设置各用户固件备份区的升级标志;
[0011]检测外部存储器中的升级标志,当需要升级时,则将需升级的固件,从用户固件备份区更新到用户代码分区2,并设置用户代码分区2在升级过程中的相关信息;
[0012]检测所述用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则执行用户代码分区2中的固件;否则,继续执行用户代码分区I中的固件。
[0013]本发明方法提出基于ARM片内FLASH的固件升级方法,将ARM片内FLASH划分为2个区域,其中一个区域用来正常运行固件,另一个区域用来升级固件;获取新版本的固件,存储在外部存储器存储中,以及设置各用户固件备份区的升级标志;当需要升级时,将需升级的固件更新到用户代码分区2中;同时系统在升级过程中,执行着用户代码分区I中的固件,并不需要系统暂停去实现固件升级,可以在系统运行过程中完成固件升级,可以提供连续的服务,保证升级完成后系统中至少有一套可执行的固件,可靠性高,对于升级后的固件的可执行性和执行结果能够进行识别。
[0014]本发明的目的还在于提出基于ARM的固件升级装置,可以在系统运行过程中完成固件升级,可以提供连续的服务,可靠性高。
[0015]为达到上述目的,采用的技术方案是:[0016]基于ARM的固件升级装置,包括:
[0017]分区单元,用于将ARM片内FLASH划分为用户代码分区I和用户代码分区2 ;
[0018]执行单元,用于将初始固件导入到所述用户代码分区1,执行用户代码分区I中的固件;
[0019]第一获取单元,用于获取新版本的固件,并导入外部存储器;
[0020]第一设置单元,用于在外部存储器中,设置各用户固件备份区的升级标志;
[0021]第一检测单元,用于检测外部存储器中的升级标志,当需要升级时,则通知升级单元进行升级;
[0022]所述升级单元,用于将需升级的固件,从用户固件备份区更新到用户代码分区2 ;
[0023]第二设置单元,用于设置用户代码分区2在升级过程中的相关信息;
[0024]第二检测单元,用于检测所述用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则所述执行单元执行用户代码分区2中的固件;否则,所述执行单元继续执行用户代码分区I中的固件。
[0025]本发明装置提出基于ARM片内FLASH的固件升级方法,将ARM片内FLASH划分为2个区域,其中一个区域用来正常运行固件,另一个区域用来升级固件;获取新版本的固件,存储在外部存储器存储中,以及设置各用户固件备份区的升级标志;当需要升级时,将需升级的固件更新到用户代码分区2中;同时系统在升级过程中,执行着用户代码分区I中的固件,并不需要系统暂停去实现固件升级,可以在系统运行过程中完成固件升级,可以提供连续的服务,保证升级完成后系统中至少有一套可执行的固件,可靠性高,对于升级后的固件的可执行性和执行结果能够进行识别。
【专利附图】

【附图说明】
[0026]图1为本发明的一个实施例流程图;
[0027]图2为本发明中进行固件升级后,重启系统的一个流程图;
[0028]图3为本发明中进行用户分区2的固件完整性判断的一个流程图;
[0029]图4为本发明中进行用户分区2的固件有效性判断的一个流程图;
[0030]图5为本发明装置的一个结构示意图;
[0031]图6为本发明装置的另一个结构示意图。
【具体实施方式】
[0032]为便于理解,下面将结合附图进行阐述。
[0033]本发明提出基于ARM的固件升级方法,请参考图1,包括步骤:
[0034]SlOljf ARM片内FLASH划分为用户代码分区I和用户代码分区2 ;
[0035]S102、将初始固件导入到用户代码分区1,执行用户代码分区I中的固件;
[0036]S103、获取新版本的固件,并导入外部存储器;
[0037]获取新版本的固件,并导入外部存储器;在外部存储器中,设置各用户固件备份区的升级标志。具体地,在外部存储器中,初始化外部存储器时,设置每个用户固件备份区的升级标志为不需升级;
[0038]当有新版本的固件时,将新版本的固件存储在其中一个用户固件备份区,并设置该用户固件备份区的升级标志为需要升级。
[0039]S104、检测到需要升级时,进行固件升级,并设置相关信息;
[0040]检测外部存储器中的升级标志,当需要升级时,则将需升级的固件,从用户固件备份区更新到用户代码分区2,并设置用户代码分区2在升级过程中的相关信息。
[0041]S105、检测到需要跳转执行升级后的固件时,跳转执行升级后的固件;否则,继续执行原有固件。
[0042]检测用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则执行用户代码分区2中的固件;否则,继续执行用户代码分区I中的固件。
[0043]本发明方法提出基于ARM片内FLASH的固件升级方法,将ARM片内FLASH划分为2个区域,其中一个区域用来正常运行固件,另一个区域用来升级固件;获取新版本的固件,存储在外部存储器存储中,以及设置各用户固件备份区的升级标志;当需要升级时,将需升级的固件更新到用户代码分区2中;同时系统在升级过程中,执行着用户代码分区I中的固件,并不需要系统暂停去实现固件升级,可以在系统运行过程中完成固件升级,可以提供连续的服务,保证升级完成后系统中至少有一套可执行的固件,可靠性高,对于升级后的固件的可执行性和执行结果能够进行识别。
[0044]在其中一个实施方式中,相关信息包括可执行标志和执行成功标志;
[0045]上述步骤S104包括:
[0046]将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若升级成功,则将外部存储器的升级标志设置为不需升级,设置用户代码分区2的可执行标志为可执行,设置用户代码分区2的执行成功标志为假;
[0047]若升级失败,则设置用户代码分区2的可执行标志为不可执行,设置用户代码分区2的执行成功标志为假。
[0048]在其中一个实施方式中,上述步骤S105包括:
[0049]检测用户代码分区2的可执行标志;当可执行时,试执行用户代码分区2的固件;若执行成功,则由用户代码分区2的固件负责设置用户代码分区2的执行成功标志为真,并正式执行用户代码分区2的固件;
[0050]当用户代码分区2的可执行标志为不可执行时,继续执行用户代码分区I中的固件。
[0051]这样可以避免系统执行非法或者无效的固件,提高了系统的可靠性。
[0052]在其中一个实施方式中,上述相关信息还包括固件的数据来源,在上述设置用户代码分区2在升级过程中的相关信息的步骤中,若升级成功,还包括设置用户代码分区2中固件的数据来源,该数据来源用于表示在外部存储器中,存储该固件的具体用户固件备份区;
[0053]当收到需更新的固件版本命令时,根据需更新的固件版本,查找对应的数据来源,设置该数据来源对应的、用户固件备份区的升级标志为需要升级。这样可以根据用户的需求,灵活选择对应版本的固件进行升级。
[0054]在其中一个实施方式中,为了进一步提高系统固件运行的安全性,对上述实施例作了如下改进,请参考图2,包括步骤:
[0055]S201、系统重启动;[0056]S202、判断是否需要升级固件;
[0057]判断是否需要升级固件,若是,则进入步骤S203 ;若否,则进行步骤S204。
[0058]S203、进行固件升级流程;
[0059]按照上述步骤S104进行固件升级流程。
[0060]S204、判断用户代码分区2的执行成功标志是否为真;
[0061]判断用户代码分区2的执行成功标志是否为真,若否,则进行步骤S205 ;若是,则进行步骤S206。
[0062]S205、执行用户代码分区I的固件;
[0063]S206、试执行用户代码分区2的固件,设置用户代码分区2的执行成功标志为假;
[0064]设置用户代码分区2的执行成功标志为假,即是清除用户代码分区2执行成功标识。
[0065]S207、判断用户代码分区2的固件执行是否成功;
[0066]判断用户代码分区2的固件执行是否成功,若是,则进行步骤S208 ;若否,则进行步骤S205。
[0067]S208、正式执行用户代码分区2的固件,并设置用户代码分区2的执行成功标志为真。
[0068]正式执行用户代码分区2的固件,由用户代码分区2的固件负责设置用户代码分区2的执行成功标志为真;
[0069]在其中一个实施方式中,为了进一步保证固件升级的安全性,进行固件升级信息完整性的判断,具体请参考图3,包括步骤:
[0070]S301、获取所需升级固件的长度信息;
[0071]S302、获取所需升级固件的校验信息;
[0072]S303、判断固件升级信息是否完整;
[0073]判断固件升级信息是否完整,若是,则进行步骤S304 ;若否,则进行步骤S305。
[0074]S304、将需升级的固件,从用户固件备份区更新到用户代码分区2 ;
[0075]S305、继续执行用户代码分区I的固件。
[0076]在其中一个实施方式中,将ARM片内FLASH划分为用户代码分区I和用户代码分区2,其中,用户代码分区I为低地址区域,用户代码分区2为高地址区域,例如,对于地址为1000的ARM片内FLASH,将地址从O至500划分为户代码分区1,将地址从500至1000划分为户代码分区2 ;为了进一步的保证固件升级的可靠性,对上述实施例进行如下改进,请参考图4,包括步骤:
[0077]S401、获取执行当前固件的用户代码分区地址;
[0078]S402、用户代码分区是否在高地址;
[0079]判断用户代码分区是否在高地址,若否,则进行步骤S403;若是,则进行步骤S404,。
[0080]S403、继续执行用户代码分区I的固件;
[0081]S404、获取用户固件备份区的执行成功标志;
[0082]S405、执行成功标志是否为真;
[0083]判断用户代码分区2的执行成功标识是否为真,若否,则进行步骤S406 ;若是,则进行步骤S407。
[0084]S406、设置该用户固件备份区的执行成功标志为真;
[0085]S407、继续执行用户代码分区2的固件。
[0086]系统如果运行在高地址区则需要将存储区中用户代码分区2执行成功标志设置为真,表示用户代码分区2的用户软件是正确的、可执行的。之所以需要标识用户代码分区2执行成功标志,是用户在下次启动时,用户代码可以判断是否需要跳转并执行用户代码分区2的用户软件。
[0087]本发明还提出基于ARM的固件升级装置,请参考图5,包括:
[0088]分区单元501,用于将ARM片内FLASH划分为用户代码分区I和用户代码分区2 ;
[0089]执行单元502,用于将初始固件导入到用户代码分区1,执行用户代码分区I中的固件;
[0090]第一获取单元503,用于获取新版本的固件,并导入外部存储器;
[0091]第一设置单元504,用于在外部存储器中,设置各用户固件备份区的升级标志;
[0092]第一检测单元505,用于检测外部存储器中的升级标志,当需要升级时,则通知升级单元进行升级;
[0093]升级单元506,用于将需升级的固件,从用户固件备份区更新到用户代码分区2 ;
[0094]第二设置单元507,用于设置用户代码分区2在升级过程中的相关信息;
[0095]第二检测单元508,用于检测用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则执行单元执行用户代码分区2中的固件;否则,执行单元继续执行用户代码分区I中的固件。
[0096]本发明装置提出基于ARM片内FLASH的固件升级方法,将ARM片内FLASH划分为2个区域,其中一个区域用来正常运行固件,另一个区域用来升级固件;获取新版本的固件,存储在外部存储器存储中,以及设置各用户固件备份区的升级标志;当需要升级时,将需升级的固件更新到用户代码分区2中;同时系统在升级过程中,执行着用户代码分区I中的固件,并不需要系统暂停去实现固件升级,可以在系统运行过程中完成固件升级,可以提供连续的服务,保证升级完成后系统中至少有一套可执行的固件,可靠性高,对于升级后的固件的可执行性和执行结果能够进行识别。
[0097]在其中一个实施方式中,相关信息包括可执行标志和执行成功标志;
[0098]升级单元506将需升级的固件,从用户固件备份区更新到用户代码分区2,第二设置单元507设置用户代码分区2在升级过程中的相关信息时,
[0099]升级单元506将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若升级成功,则第二设置单元507将外部存储器的升级标志设置为不需升级,设置用户代码分区2的可执行标志为可执行,设置用户代码分区2的执行成功标志为假;
[0100]若升级失败,则第二设置单元507设置用户代码分区2的可执行标志为不可执行,设置用户代码分区2的执行成功标志为假。
[0101]在其中一个实施方式中,第二检测单元508检测用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则执行单元502执行用户代码分区2中的固件;否贝U,继续执行用户代码分区I中的固件,具体为:
[0102]第二检测单元508检测用户代码分区2的可执行标志;当可执行时,执行单元502试执行用户代码分区2的固件;若执行成功,则第二设置单元507设置用户代码分区2的执行成功标志为真,并正式执行用户代码分区2的固件;
[0103]当用户代码分区2的可执行标志为不可执行时,执行单元502继续执行用户代码分区I中的固件。
[0104]在其中一个实施方式中,为了可以灵活适应用户的不同需求,在第二设置单元507设置用户代码分区2在升级过程中的相关信息时,若升级成功,还包括设置用户代码分区2中固件的数据来源,该数据来源用于表示在外部存储器中,存储该固件的具体用户固件备份区;
[0105]当所升级单元506收到需更新的固件版本命令时,根据需更新的固件版本,从外部存储器中,查找对应的数据来源,第一设置单元504设置该数据来源对应的、用户固件备份区的升级标志为需要升级。
[0106]在其中一个实施方式中,第一设置单元504在外部存储器中,设置各用户固件备份区的升级标志时,若是初始化外部存储器,则设置每个用户固件备份区的升级标志为不需升级;
[0107]若有新版本的固件,则将新版本的固件存储在其中一个用户固件备份区,并设置该用户固件备份区的升级标志为需要升级。
[0108]在其中一个实施方式中,为保证提高系统的可靠性,进行固件升级的完整性校验,具体请参考图6,基于ARM的固件升级装置还包括:第二获取单元509和第三检测单元510 ;
[0109]其中,获取单元509获取固件的长度信息和校验信息;第三检测单元510根据固件的长度信息和校验信息,检测固件是否完整,若完整,则升级单元506将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若不完整,则执行单元502继续执行用户代码分区I中的固件。
[0110]以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
【权利要求】
1.基于ARM的固件升级方法,其特征在于,包括步骤: 将ARM片内FLASH划分为用户代码分区I和用户代码分区2 ; 将初始固件导入到所述用户代码分区1,执行用户代码分区I中的固件; 获取新版本的固件,并导入外部存储器; 在所述外部存储器中,设置各用户固件备份区的升级标志; 检测外部存储器中的升级标志,当需要升级时,则将需升级的固件,从用户固件备份区更新到用户代码分区2,并设置用户代码分区2在升级过程中的相关信息; 检测所述相关信息,当需要跳转执行用户代码分区2中的固件时,则执行用户代码分区2中的固件;否则,继续执行用户代码分区I中的固件。
2.根据权利要求1所述的基于ARM的固件升级方法,其特征在于, 所述相关信息包括可执行标志和执行成功标志; 所述将需升级的固件,从用户固件备份区更新到用户代码分区2,并设置用户代码分区2在升级过程中的相关信息的步骤包括: 将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若升级成功,则将所述外部存储器的升级标志设置为不需升级,设置用户代码分区2的可执行标志为可执行,设置用户代码分区2的执行成功标志为假; 若升级失败,则设置用户代码分区2的可执行标志为不可执行,设置用户代码分区2的执行成功标志为假。·
3.根据权利要求2所述的基于ARM的固件升级方法,其特征在于, 所述检测用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则执行用户代码分区2中的固件;否则,继续执行用户代码分区I中的固件的步骤包括: 检测用户代码分区2的可执行标志;当可执行时,试执行用户代码分区2的固件;若执行成功,则由用户代码分区2的固件负责设置用户代码分区2的执行成功标志为真,并正式执行用户代码分区2的固件; 当用户代码分区2的可执行标志为不可执行时,继续执行用户代码分区I中的固件。
4.根据权利要求3所述的基于ARM的固件升级方法,其特征在于, 若系统重启,则执行所述用户代码分区I的固件; 进行所述检测外部存储器中的升级标志的步骤;若不需要升级,则检测所述用户代码分区2的执行成功标志是否为真,若是,则试执行用户代码分区2的固件,并设置用户代码分区2的执行成功标志为假; 若试执行用户代码分区2成功,则由用户代码分区2的固件负责设置用户代码分区2的执行成功标志为真,并正式执行用户代码分区2的固件。
5.根据权利要求2所述的基于ARM的固件升级方法,其特征在于, 在所述设置用户代码分区2在升级过程中的相关信息的步骤中,若升级成功,还包括设置用户代码分区2中固件的数据来源,该数据来源用于表示在所述外部存储器中,存储该固件的具体用户固件备份区; 当收到需更新的固件版本命令时,根据需更新的固件版本,查找对应的数据来源,设置该数据来源对应的、用户固件备份区的升级标志为需要升级。
6.根据权利要求1所述的基于ARM的固件升级方法,其特征在于,所述在外部存储器中,设置各用户固件备份区的升级标志的步骤包括: 在外部存储器中,初始化所述外部存储器时,设置每个用户固件备份区的升级标志为不需升级; 当有新版本的固件时,将新版本的固件存储在其中一个用户固件备份区,并设置该用户固件备份区的升级标志为需要升级。
7.根据权利要求1至6任一项所述的基于ARM的固件升级方法,其特征在于, 在所述对用户代码分区2进行固件升级的步骤前,获取固件的长度信息和校验信息;根据所述固件的长度信息和校验信息,判断所述固件是否完整,若是,则进行所述将需升级的固件,从用户固件备份区更新到用户代码分区2的步骤;若不完整,则继续执行用户代码分区I中的固件。
8.基于ARM的固件升级装置,其特征在于,包括: 分区单元,用于将ARM片内FLASH划分为用户代码分区I和用户代码分区2 ; 执行单元,用于将初始固件导入到所述用户代码分区1,执行用户代码分区I中的固件; 第一获取单元,用于获取新版本的固件,并导入外部存储器; 第一设置单元,用于在外部存储器中,设置各用户固件备份区的升级标志; 第一检测单元,用于检测外部存储器中的升级标志,当需要升级时,则通知升级单元进行升级; 所述升级单元,用于将需升级的固件,从用户固件备份区更新到用户代码分区2 ; 第二设置单元,用于设置用户代码分区2在升级过程中的相关信息; 第二检测单元,用于检测所述用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则所述执行单元执行用户代码分区2中的固件;否则,所述执行单元继续执行用户代码分区I中的固件。
9.根据权利要求8所述的基于ARM的固件升级装置,其特征在于, 所述相关信息包括可执行标志和执行成功标志; 所述升级单元将需升级的固件,从用户固件备份区更新到用户代码分区2,所述第二设置单元设置用户代码分区2在升级过程中的相关信息时, 所述升级单元将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若升级成功,则所述第二设置单元将所述外部存储器的升级标志设置为不需升级,设置用户代码分区2的可执行标志为可执行,设置用户代码分区2的执行成功标志为假; 若升级失败,则所述第二设置单元设置用户代码分区2的可执行标志为不可执行,设置用户代码分区2的执行成功标志为假。
10.根据权利要求9所述的基于ARM的固件升级装置,其特征在于, 所述第二检测单元检测用户代码分区2的相关信息,当需要跳转执行用户代码分区2中的固件时,则所述执行单元执行用户代码分区2中的固件;否则,继续执行用户代码分区I中的固件,具体为: 所述第二检测单元检测用户代码分区2的可执行标志;当可执行时,所述执行单元试执行用户代码分区2的固件;若执行成功,则所述第二设置单元设置用户代码分区2的执行成功标志为真,并正式执行用户代码分区2的固件;当用户代码分区2的可执行标志为不可执行时,所述执行单元继续执行用户代码分区I中的固件。
11.根据权利要求9所述的基于ARM的固件升级装置,其特征在于, 在所述第二设置单元设置用户代码分区2在升级过程中的相关信息时,若升级成功,还包括设置用户代码分区2中固件的数据来源,该数据来源用于表示在所述外部存储器中,存储该固件的具体用户固件备份区; 当所升级单元收到需更新的固件版本命令时,根据需更新的固件版本,从所述外部存储器中,查找对应的数据来源,所述第一设置单元设置该数据来源对应的、用户固件备份区的升级标志为需要升级。
12.根据权利要求8所述的基于ARM的固件升级装置,其特征在于, 所述第一设置单元在外部存储器中,设置各用户固件备份区的升级标志时,若是初始化所述外部存储器,则设置每个用户固件备份区的升级标志为不需升级; 若有新版本的固件,则将新版本的固件存储在其中一个用户固件备份区,并设置该用户固件备份区的升级标志为需要升级。
13.根据权利要求8至12任一项所述的基于ARM的固件升级装置,其特征在于,所述基于ARM的固件升级装置还包括:第二获取单元和第三检测单元; 其中,所述获取单元获取固件的长度信息和校验信息;所述第三检测单元根据所述固件的长度信息和校验信息,检测所述固件是否完整,若完整,则所述升级单元将需升级的固件,从用户固件备份区更新到用户代码分区2 ;若不完整,则所述执行单元继续执行用户代码分区I中的固件。·
【文档编号】G06F9/445GK103853565SQ201210499758
【公开日】2014年6月11日 申请日期:2012年11月28日 优先权日:2012年11月28日
【发明者】刘军, 方彬浩, 赖福琪 申请人:京信通信系统(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1