基于分段式的嵌入式固件升级方法及装置转让专利

申请号 : CN200810218241.8

文献号 : CN101425018B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吕巧

申请人 : 深圳创维数字技术股份有限公司

摘要 :

本发明公开一种基于分段式的嵌入式固件升级方法,其包括步骤:获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;从所述升级数据包中提取配置文件,由所述配置文件分别对所述固件进行升级前检查,生成包含对所述固件进行升级操作的指令的升级程序:执行升级程序,对固件进行分段式升级处理。本发明还公开一种基于分段式的嵌入式固件升级装置。本发明通过配置文件来生成升级程序控制对应用程序进行分段式的单独升级,提高了固件升级的稳定性和安全性。

权利要求 :

1.一种基于分段式的嵌入式固件升级方法,其特征在于,包括步骤:获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;

从所述升级数据包中提取配置文件,由所述配置文件进行升级前检查,生成升级程序;

执行升级程序,对固件进行分段式升级处理,升级步骤包括:对需要升级处理的文件系统、内核文件进行整体升级处理;

对需要升级处理的各个应用程序分别以应用程序为单位进行单独的升级处理。

2.根据权利要求1所述的基于分段式的嵌入式固件升级方法,其特征在于,所述升级前检查包括:对内核文件、文件系统和各个应用程序分别进行版本比较和校验;

对各个应用程序进行依赖关系和兼容关系的检查。

3.根据权利要求1所述的基于分段式的嵌入式固件升级方法,其特征在于,所述升级操作的指令至少包括:对固件中需要升级处理的文件系统、内核文件进行整体升级处理的文件系统删除和写入指令、内核文件删除和写入指令;

对固件中需要升级处理的各个应用程序的删除和写入指令。

4.根据权利要求1所述的基于分段式的嵌入式固件升级方法,其特征在于,所述固件存储于快闪存储器中,该快闪存储器包括:存储引导加载程序的存储区、存储内核文件的存储区、存储文件系统的存储区;存储应用程序的应用存储区;备份原始的内核文件、文件系统和应用程序的备份区。

5.根据权利要求4所述的基于分段式的嵌入式固件升级方法,其特征在于,当升级出错时的处理方式包括:通过触发将所述备份区中的所述原始的内核文件、文件系统和应用程序分别复制至所述内核文件的存储区、所述文件系统的存储区和所述应用存储区;

控制重新启动所述引导加载程序存储区中的引导加载程序。

6.根据权利要求1所述的基于分段式的嵌入式固件升级方法,其特征在于,所述升级数据包的结构包括:分别单独存储的配置文件版本号和校验码、配置文件、内核文件版本号和校验码、内核文件、文件系统版本号和校验码、文件系统、多个应用程序及对应的版本号和校验码。

7.一种基于分段式的嵌入式固件升级装置,其特征在于,包括:升级数据包获取模块,用于获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;

升级程序生成模块,用于从所述升级数据包中提取配置文件,由所述配置文件进行升级前检查,生成升级程序;

分段升级处理模块,执行升级程序,对固件进行分段式升级处理,即对需要升级处理的文件系统、内核文件进行整体升级处理;对需要升级处理的各个应用程序分别以应用程序为单位进行单独的升级处理。

8.根据权利要求7所述的基于分段式的嵌入式固件升级装置,其特征在于,所述升级程序生成模块包括:版本比较与校验单元,用于对内核文件、文件系统和各个应用程序分别进行版本比较和校验;

应用程序关系检查单元,用于对各个应用程序进行依赖关系和兼容关系的检查;

其中,所述配置文件中设置有各个应用程序之间的依赖关系和兼容关系的信息。

9.根据权利要求7所述的基于分段式的嵌入式固件升级装置,其特征在于,所述分段升级处理模块包括:整体升级单元,用于对固件中需要升级处理的文件系统、内核文件进行整体升级处理;

单独升级单元,用于对固件中需要升级处理的各个应用程序进行单独的升级处理。

说明书 :

基于分段式的嵌入式固件升级方法及装置

技术领域

[0001] 本发明涉及软件升级技术,尤其是涉及一种采用分段式对嵌入式固件升级方法及装置。

背景技术

[0002] 嵌入式固件(Firmware)是由一组已经编译好的二进制代码组成,包含引导加载程序(BootLoader)、内核文件和文件系统,通常存储在板上的快闪存储器(Flash)中,如图1所示。其中BootLoader保存在Flash的0x00000000地址,此地址为硬件系统上电启动运行的地址。BootLoader的作用是:初始化最基本的硬件,把自身拷贝到RAM里运行,把内核文件和文件系统拷贝到RAM里面,并在运行完后跳转到内核文件去运行内核文件以及文件系统。而通常BootLoader是不需要升级的,只需对内核文件和文件系统进行升级。
[0003] 嵌入式固件升级是目前的电子产品必备的一项功能,而且升级的方便性和稳定性直接关乎产品的品质问题。嵌入式固件升级时,BootLoader保持不变,应用程序放在文件系统中,需要做应用修改升级时,会直接升级内核文件或者文件系统。
[0004] 一般电子产品的固件升级软件是放在网络上,客户下载下来后,通过产品已做好的升级程序,升级为此固件版本。通常为了防止用户下载到破损的固件,厂商在固件发布前,通常将升级文件用压缩工具(例如WinZip或者WinRar)进行打包,用户下载后先进行解压,如果解压成功(WinZIP和WinRAR自带文件完整性校验功能),再通过嵌入式系统提供的升级方法将固件下载到设备中。
[0005] 由于现在的电子产品功能越来越多,应用程序也越来越大,而应用程序是放在文件系统中,导致文件系统越来越大,因此对文件系统升级时会耗费较长时间,给固件升级增加不稳定和不安全因素:若在升级过程中出错,则文件系统容易被损坏,甚至导致电子产品不能继续正常使用。
[0006] 因此,有必要改善和提高对电子产品进行嵌入式固件升级的稳定性和安全性。

发明内容

[0007] 本发明的目的是提出一种采用分段式对嵌入式固件升级方法及装置,把应用程序和文件系统分开存储,并且通过配置文件来生成升级程序控制对应用程序进行分段式的单独升级,从而提高固件升级的稳定性和安全性。
[0008] 为解决上述技术问题,本发明公开一种基于分段式的嵌入式固件升级方法,其包括步骤:
[0009] 获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;
[0010] 从所述升级数据包中提取配置文件,由所述配置文件分别对所述固件进行升级前检查,生成包含对所述固件进行升级操作的指令的升级程序;
[0011] 执行升级程序,对固件进行分段式升级处理。
[0012] 优选的,所述对固件进行分段式升级处理的步骤包括:
[0013] 对固件中需要升级处理的文件系统、内核文件进行整体升级处理;
[0014] 对固件中需要升级处理的各个应用程序进行单独的升级处理。
[0015] 优选的,所述配置文件中设置有各个应用程序之间的依赖关系和兼容关系的信息;所述升级前检查包括:
[0016] 对内核文件、文件系统和各个应用程序分别进行版本比较和校验;
[0017] 对各个应用程序进行依赖关系和兼容关系的检查。
[0018] 优选的,所述升级操作的指令至少包括:
[0019] 对固件中需要升级处理的文件系统、内核文件进行整体升级处理的文件系统删除和写入指令、内核文件删除和写入指令;
[0020] 对固件中需要升级处理的各个应用程序的删除删除和写入指令。
[0021] 优选的,所述固件存储于快闪存储器中,该快闪存储器包括:分别用于存储引导加载程序、内核文件、文件系统的存储区;存储应用程序的应用存储区;备份原始的内核文件、文件系统和应用程序的备份区。
[0022] 优选的,当升级出错时的处理方式包括:通过触发将所述备份区中的所述原始的内核文件、文件系统和应用程序分别复制至所述内核文件存储区、所述文件系统存储区和所述应用存储区;控制重新启动所述引导加载程序。
[0023] 优选的,所述升级数据包的结构包括:分别单独存储的配置文件版本号和校验码、配置文件、内核文件版本号和校验码、内核文件、文件系统版本号和校验码、文件系统、多个应用程序及对应的版本号和校验码。
[0024] 另外,本发明还公开一种基于分段式的嵌入式固件升级装置,其包括:
[0025] 升级数据包获取模块,用于获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;
[0026] 升级程序生成模块,用于从所述升级数据包中提取配置文件,由所述配置文件分别对所述固件进行升级前检查,生成包含对所述固件进行升级操作的指令的升级程序;
[0027] 分段升级处理模块,执行升级程序,对固件进行分段式升级处理。
[0028] 优选的,所述升级程序生成模块包括:版本比较与校验单元,用于对内核文件、文件系统和各个应用程序分别进行版本比较和校验;
[0029] 应用程序关系检查单元,用于对各个应用程序进行依赖关系和兼容关系的检查;
[0030] 其中,所述配置文件中设置有各个应用程序之间的依赖关系和兼容关系的信息。
[0031] 优选的,所述分段升级处理模块包括:
[0032] 整体升级单元,用于对固件中需要升级处理的文件系统、内核文件进行整体升级处理;
[0033] 单独升级单元,用于对固件中需要升级处理的各个应用程序进行单独的升级处理。
[0034] 与现有技术相比,本发明具有如下有益效果:
[0035] 1、由于本发明可以由配置文件做检测且生成控制固件升级的升级程序,故升级过程无需人工干预,简化了升级步骤;
[0036] 2、本发明采用分段式升级方法,由于可以选择性的对某个应用程序升级,故可以减少升级时间,提高升级效率;
[0037] 3、由于本发明可单独对某个应用程序,或对文件系统或内核文件进行整体升级,使固件升级细化,从而增加固件升级过程的稳定性;
[0038] 4、由于本发明在Flash中划分出的专门的备份区,以便很好的处理升级处理情况,故可以规避掉许多升级出错而导致问题。

附图说明

[0039] 图1是现有固件在Flash中的分段存储结构示意图;
[0040] 图2是本发明对存储固件的Flash所定义的分段存储结构示意图;
[0041] 图3是本发明一个较佳实施例的流程示意图;
[0042] 图4是本发明的升级数据包的文件结构示意图;
[0043] 图5是图4中生成升级程序的一个较佳实施例的流程示意图;
[0044] 图6是本发明出现升级出错时的处理流程示意图;
[0045] 图7是本发明升级装置的结构示意图。
[0046] 具体实施方式
[0047] 本发明通过升级数据包中的配置文件(Configure)对固件各应用程序的兼容关系和依赖关系进行检查,生成一个包含了所有升级操作指令的升级程序(upgrade.sh),通过执行升级程序来对采用预设分段存储结构存储在Flash中的嵌入式固件进行升级。
[0048] 如图2所示,为便于对嵌入式固件进行升级,将Flash的存储结构定义为5部分:分别用于存储引导加载程序(BootLoader)、内核文件、文件系统的存储区,以及应用存储区和备份区。
[0049] 其中,Bootloader为电子产品的硬件系统上电启动运行的程序,无需进行升级;内核文件是操作系统的内部核心程序,它向外部提供了对设备的核心管理调用;文件系统包括根文件系统和建立于Flash之上文件系统,为除开应用程序的文件系统和跳转到应用存储区的跳转程序或指令的集合;应用存储区存放各个应用程序和可控制对里面的任何一个应用程序单独升级的配置文件(Configure),它在整个系统中是以文件系统(例如yaffs)的方式存在,并且挂载在系统的一个目录下,可以像操作普通的存储设备一样;备份区对电子产品出厂时的内核文件、文件系统和应用存储区进行备份,且不做升级处理。
[0050] 当电子产品上电时,从Bootloader启动并由它把内核文件和文件系统拷贝到RAM中,并跳转到它们的RAM地址执行,当内核文件和文件系统启动完成后,文件系统中的跳转指令或程序直接调用应用存储区中的应用程序。
[0051] 如图3所示,本发明采用如下步骤来实现:
[0052] 步骤S110:从网站或其他外接设备中获取用于固件升级的升级数据包。
[0053] 结合图4所示,升级数据包包括:配置文件的版本号&校验码、配置文件、内核文件的版本号&校验码、内核文件、文件系统的版本号&校验码、文件系统,以及多个应用程序的版本号&校验码和相应的应用程序。
[0054] 步骤S120:从升级数据包中提取配置文件,由配置文件检测对固件中文件系统、内核文件、各应用程序的版本号及进行校验,其目的是升级前对固件的各部分进行兼容关系和依赖关系检查,以确定固件需要进行升级的部分,以及固件各部分进行升级的顺序等,根据检查结果生成一个包含了所有升级操作指令的升级程序(upgrade.sh)。
[0055] 电子产品各个应用程序之间常常会出现相互依赖和兼容的情形,比如:应用程序A为主程序,应用程序B和C均为应用程序A的子程序,并且,应用程序B依赖于依赖于某个版本之上的应用程序C,若在此版本之前的版本,运行应用程序B就会出错;应用程序B的某个版本和应用程序C的某个版本互相不兼容,两个同时存在的话,应用程序运行起来会出错。因此,为防止此情况影响对固件升级处理,需要由配置文件对固件进行兼容关系和依赖关系检查。
[0056] 假设应用程序A、B、C和D的当前版本均为1.0;升级数据包中对应的升级文件的版本为:应用程序A:1.1;应用程序C:1.0;应用程序D:1.1;且配置文件中体现的各个应用程序的依赖关系为:应用程序A依赖于应用程序B和C,且要求应用程序B的版本大于1.1。则生成升级程序的过程如图5所示:
[0057] 步骤S121:由配置文件检查升级数据包中相应的升级文件的版本是否大于电子产品的固件中应用程序A、B、C和D的当前版本,并利用校验码进行校验处理。
[0058] 步骤S122:由于升级数据包中只有应用程序A和D的升级文件的版本大于电子产品的固件中应用程序A和D的当前版本,确定只需对应用程序A和D进行升级处理。
[0059] 步骤S123:由配置文件对应用程序A和D作兼容关系和依赖关系检查,获知体现在配置文件中的依赖关系:的依赖关系为:应用程序A依赖于应用程序B和C,且要求应用程序B的版本大于1.1;由于应用程序A存在依赖关系,而应用程序D不存在依赖关系,故决定先升级应用程序D。
[0060] 步骤S124:升级应用程序D,将升级后应用程序D的版本号修改为1.1。
[0061] 步骤S125:再次对升级应用程序A做依赖关系检查。
[0062] 步骤S126:由于升级应用程序A依赖于升级应用程序B和C,且要求应用程序B的版本大于1.1;因此,需判断应用程序B的版本是否大于1.1,若是,则转步骤S127,否则转步骤S129。
[0063] 步骤S127:升级应用程序A,将升级后应用程序A的版本号修改为1.1。
[0064] 步骤S128:生成升级程序(upgrade.sh)。
[0065] 步骤S129:当不满足升级条件时,退出并提示升级出错和出错原因。
[0066] 其中,升级程序包含所有需要升级操作的指令,包括:内核文件的擦除和写入、文件系统的擦除和写入、应用存储区中的各个应用程序的删除或写入。
[0067] 步骤S130:通过执行升级程序来对采用预设分段存储结构存储在Flash中的嵌入式固件进行分段升级。
[0068] 根据升级程序中的操作指令,对内核文件和文件系统做整体升级;对于应用存储区中的应用程序,由于固件在Flash中采用分段存储结构,而升级数据包也采用各个应用程序单独设置的分段式文件结构,因此,可对应用程序进行单独升级,例如:有一个应用程序A和两个可供应用程序A调用的应用程序B和C,若升级数据包中只对应用程序只对B做了修改,则只需对应用程序B进行单独升级,而其他的应用程序A和C均不需改变。
[0069] 如图6所示,如果在升级过程中出现意外,导致升级出错,且产品无法正常使用时,解决此问题有如下方法:
[0070] 步骤S210:由Bootloader启动电子产品。
[0071] 步骤S220:人为操作,做一个触发按键,若侦测到指定的按键触发,转步骤S230,否则转步骤S240。
[0072] 步骤S230:将备份区里对内核文件、文件系统和应用程序的备份拷贝到Flash中相应的地址,再重启,再在应用层做升级。
[0073] 步骤S240:若侦测不到指定的按键触发,则由Bootloader把内核文件和文件系统拷贝到RAM中,并跳转到它们的RAM地址执行,当内核文件和文件系统启动完成后,文件系统中的跳转指令或程序直接调用应用存储区中的应用程序,进入正常运行。
[0074] 如图7所示,本发明公开的对嵌入式固件升级装置包括:升级数据包获取模块310、升级程序生成模块320和分段升级处理模块330。所述升级数据包获取模块310用于获取对文件系统和应用程序分开存储的固件进行升级的升级数据包;所述升级程序生成模块320用于从所述升级数据包中提取配置文件,由所述配置文件分别对所述固件进行升级前检查,生成包含对所述固件进行升级操作的指令的升级程序;所述分段升级处理模块
330执行升级程序,对固件进行分段式升级处理。
[0075] 其中,所述升级程序生成模块320包括:版本比较与校验单元321和应用程序关系检查单元322。所述版本比较与校验单元321用于对内核文件、文件系统和各个应用程序分别进行版本比较和校验;所述应用程序关系检查单元322用于对各个应用程序进行依赖关系和兼容关系的检查。其中,配置文件中设置有各个应用程序之间的依赖关系和兼容关系的信息。
[0076] 所述分段升级处理模块330包括:整体升级单元331和单独升级单元332。所述整体升级单元331用于对固件中需要升级处理的文件系统、内核文件进行整体升级处理;所述单独升级单元332用于对固件中需要升级处理的各个应用程序进行单独的升级处理。
[0077] 综上,本发明采用分段式升级方法,由于可以选择性的对某个应用程序升级,故可以减少升级时间,提高升级效率;其次,由于本发明可单独对某个应用程序,或对文件系统或内核文件进行整体升级,使固件升级细化,从而增加固件升级过程的稳定性;再次,由于本发明可以由配置文件做检测且生成控制固件升级的升级程序,故升级过程无需人工干预,简化了升级步骤;最后,由于本发明在Flash中划分出的专门的备份区,以便很好的处理升级处理情况,故可以规避掉许多升级出错而导致问题。