一种防止固件升级失败的方法和设备的制作方法

文档序号:6510370阅读:207来源:国知局
一种防止固件升级失败的方法和设备的制作方法
【专利摘要】本发明是一种防止固件升级失败的方法和设备,方法包含以下步骤:1)启动设备;2)通过了合法性和一致性校验;3)未通过合法性和一致性校验,则在可更新固件和原始固件中选择一个较佳的版本,执行固件升级程序;4)固件升级程序完成后,重新启动设备,重复步骤1)。优点:升级前进行合法性校验,排除文件损坏的固件、版本号不符合的固件或者与设备型号不匹配的固件,提高升级成功率;每次设备启动时都进行一致性校验,当应用程序被意外修改、损坏或删除后能够自动恢复;当升级过程由于断电或强制重启造成中断后,能够自动恢复升级,最差的情况出现,也能够启动一个受保护的最小系统以供重新升级,不会造成设备无法运行。
【专利说明】一种防止固件升级失败的方法和设备
【技术领域】
[0001]本发明涉及的是一种防止固件升级失败的方法和设备,属于数字信息传输【技术领域】。
【背景技术】
[0002]固件是一种嵌入在硬件设备中的软件,通常位于特殊应用集成电路(ASIC)或可编程逻辑器件(PLD)中的闪存、电可擦除可编程只读存储器(EEPROM)或可编程只读存储器(PROM)里,有的可以让用户更新。
[0003]随着相关领域技术和用户需求的日新月异,厂商一般会通过定期的固件升级来提升设备的性能及可靠性、修复现有的程序问题或者为设备增加新的功能,从而使设备保持在最佳的工作状态。
[0004]为了升级设备的固件,现有技术通常采用以下步骤:1.将新固件包复制到需要升级的设备存储器中;2.设备对新固件包校验,确认新固件包的完整性;3.对新固件包进行解包操作,用新固件包中的文件内容覆盖系统中原有的固件内容。不难发现,上述方案步骤3的解包操作中,如果在写入时出现断电或强制重启的方式中断升级过程,那么有可能造成文件损坏,固件内容不完整,导致设备无法正常启动,或者需要使用非常规方式重新刷入固件。完成这个不可中断的操作过程的在一些存储介质上比较耗时,无论发生的几率大小,固件升级失败后造成的后果是非常严重的,存在较大的风险。

【发明内容】

[0005]本发明提出的是一种防止固件升级失败的方法和设备,其目的旨在解决现有技术所存在的上述的缺陷,有效防止固件升级失败。
[0006]本发明的技术解决方案:一种防止固件升级失败的方法,包含以下步骤:
1)启动设备,开机进入操作系统后,进入固件校验程序,对可更新固件中的文件内容和已安装的应用程序文件内容进行合法性和一致性校验;
2)通过了合法性和一致性校验,则退出固件校验程序,执行已安装的应用程序;
3)未通过合法性和一致性校验,则在可更新固件和原始固件中选择一个较佳的版本,执行固件升级程序;
4 )固件升级程序完成后,重新启动设备,重复步骤2 )进入固件校验程序。
[0007]—种防止固件升级失败的设备,其特征是包含只读存储装置和可读写存储装置,所述的只读存储装置,包含以下模块:a.操作系统模块,用于管理设备的硬件与软件资源,为其他模块提供运行环境;b.固件校验和升级模块,用于在应用程序模块损坏或需要更新的情况下,根据可更新固件存储模块的内容,自动修复应用程序模块,从而确保应用程序模块总是能够工作,或者自动更新应用程序模块,使其保持在最佳的工作状态,该模块还用于在可更新固件存储模块损坏的情况下,使用原始固件存储模块自动替换可更新固件存储模块,从而确保恢复设备的基本功能,以便重新升级;c.原始固件存储模块,用于保存一个一定能够正常运行的版本的固件,本身不可执行;
所述的可读写存储装置,包含以下模块:a.可更新固件存储模块,用于保存新版本的固件,本身不可执行;b.应用程序模块,用于提供设备的实际功能,应用程序可以在操作系统模块提供的环境下执行,在通过固件校验模块的校验之后启动,本模块所述的应用程序来自可更新固件存储模块。
[0008]本发明与现有技术相比,主要区别及其效果在于:
升级前进行合法性校验,排除文件损坏的固件、版本号不符合的固件或者与设备型号不匹配的固件,提高升级成功率;
每次设备启动时都进行一致性校验,当应用程序被意外修改、损坏或删除后能够自动恢复;
当升级过程由于断电或强制重启造成中断后,能够自动恢复升级,最差的情况(如通过校验后的固件仍然由于某种原因损坏)出现,也能够启动一个受保护的最小系统以供重新升级,不会造成设备无法运行。
【专利附图】

【附图说明】
[0009]图1是本发明A实施方式的流程图。
[0010]图2是本发明B实施方式的流程图。
[0011]图3是一种防止固件升级失败的设备结构示意图。
【具体实施方式】
[0012]一种防止固件升级失败的方法,包括以下步骤:
1)启动设备,开机进入操作系统后,进入固件校验程序,对可更新固件中的文件内容和已安装的应用程序文件内容进行合法性和一致性校验;
2)通过了合法性和一致性校验,则退出固件校验程序,执行已安装的应用程序;
3)未通过合法性和一致性校验,则在可更新固件和原始固件中选择一个较佳的版本,执行固件升级程序;
4)固件升级程序完成后,重新启动设备,重复步骤2)进入固件校验程序。
[0013]所述的操作系统、固件校验程序以及原始固件和固件升级程序、可更新固件都保存在设备中的只读存储器中,其内容可以通过程序或者用户操作修改。
[0014]所述的保存在可读写存储器中,其内容全部来自可更新固件或者原始固件。
[0015]所述的合法性和一致性的校验,包含以下步骤:a.检查可更新固件是否能够支持该设备的型号或固有识别号是否合法;b.使用冗余校验算法CRC、MD5或SHAl ;
c.将可更新固件中的文件和已安装的应用程序文件逐一进行比对,如果已安装的应用程序的任何一个文件丢失或者校验结果不符,则一致性校验不通过。
[0016]所述的原始固件,它是具有完整功能的普通固件或是为了减少存储空间占用而定制的简化版本,该简化版本至少应能够提供固件升级的功能。
[0017]所述的在可更新固件未损坏的情况下,优先选择可更新固件,否则选择原始固件。
[0018]所述的在本权利要求涉及的运行环境中,无法通过应用程序或者用户操作的方式修改其中的内容,只读存储器使用固化的硬件实现,或使用底层软件虚拟保护的方式实现。[0019]实施例1
如图1所示,
在步骤SllO中,用户将新版本的固件包以HTTP POST、FTP、TFTP、SCP或者读取外部存储卡的方式上传到设备中的临时存储空间(如RAM)中。
[0020]接着,在步骤Slll中,对上传的固件包进行完整性校验,在本实施方式中,固件包是由应用程序文件经过tar打包,再加上gz、bz2等算法压缩后制作成的标准压缩包,将固件包的文件内容解压缩到临时存储空间,如果能够正确解压缩,那么说明固件包是完整的,接着,用这个固件包覆盖现有的可更新固件,进入步骤S112 ;如果不能够正确解压缩,则删除这个固件包,中止升级程序,进入步骤S116。
[0021]在步骤S112中,重新启动设备,进入固件校验程序,再次将固件包解压缩到临时存储空间,使用冗余校验算法(如CRC、MD5或SHA1,不同算法的精确性有差异,但都可以实现一致性校验的功能)对解压缩的文件内容计算,得到校验值A。
[0022]接着,在步骤S113中,使用冗余校验算法对现有应用程序的文件内容计算,得到校验值B。
[0023]接着,在步骤SI 14中,逐一将校验值A与校验值B做比较,如果所有文件的A校验值与B校验值都符合,进入步骤SI 16,否则进入升级步骤SI 15。
[0024]在步骤S115中,使用步骤S112解压缩的文件覆盖应用程序,完成升级,进入步骤S116,需要说明的是,如果本步骤执行过程中由于断电或强制重启造成升级过程中断,那么在重新启动设备后执行的步骤S114中,将无法通过校验,导致重新进入本步骤。
[0025]在步骤S116中,启动应用程序。
[0026]实施例2
本实施方式在第一实施方式的基础上进行了改进,主要改进之处在于,在本实施方式中,改进了第一实施方式的校验方法,使用Linux系统中的软件包管理系统(如DEB或RPM)对应用程序进行自动安装、配置、卸载和升级。
[0027]如图2所示,在步骤S210中,用户将新版本的固件包上传到设备中的临时存储空间中。
[0028]接着,在步骤S211中,对上传的固件包进行完整性校验,在本实施方式中,固件包是操作系统能够识别的标准安装包,可以提供以下功能:根据可更新固件的版本号(通常有主版本号、次版本号和修订版本号)判断现有的应用程序是否需要升级;根据可更新固件的依赖关系,防止在设备上安装错误的固件,如果通过本步骤的校验,进入步骤S212,否则删除这个固件包,中止升级程序,进入步骤S216。
[0029]在步骤S212中,重新启动设备,进入固件校验程序,提取固件包中所有文件的校验值(一般以文本文件方式保存在标准安装包中),作为校验值A。
[0030]接着,在步骤S213中,使用冗余校验算法对现有应用程序的文件内容计算,得到校验值B。
[0031 ] 接着,在步骤S214中,逐一将校验值A与校验值B做比较,如果所有文件的A校验值与B校验值都符合,进入步骤S216,否则进入升级步骤S216。
[0032]在步骤S215中,启动软件包管理系统安装固件包,如果已有旧版本,系统会先删除旧版本再安装新版本,这样旧版本中的垃圾文件不会残留在设备中,完成升级,进入步骤S216,需要说明的是,如果本步骤执行过程中由于断电或强制重启造成升级过程中断,那么在重新启动设备后执行的步骤S214中,将无法通过校验,导致重新进入本步骤。
[0033]在步骤S216中,启动应用程序。
[0034]如图3所示,一种防止固件升级失败的设备,该设备包含:只读存储装置A和可读写存储装置B。其中,只读存储装置的实现可以使用专门的硬件R0M,但是为了节省成本,本实施方案中使用一块普通的IGB存储卡来实现上述两个装置。
[0035]具体的,在这个存储卡上划分两个分区,第一分区用于实现只读存储装置,第一分区的大小需要根据具体的操作系统大小确定;将存储卡的剩余容量分配给第二分区,用于实现可读写存储装置。
[0036]其中,操作系统Al和其他需要保护的程序如固件校验程序A2和升级程序A3以及原始固件A4存储在第一分区,第一分区的文件系统格式应采用系统内核固有支持的格式,采用Windows PE、或者裁剪后的Linux系统,一般最少需要100MB,如果设备需要较全面的图形界面支持,则需要300MB,较小的操作系统适合基于半导体存储器的嵌入式设备。
[0037]其中,可更新固件BI和应用程序模块B2存储在第二分区,在存在多个可选择方案的情况下,第二分区应该优先选择能够支持操作系统特定功能的文件系统格式,以便能够使用相应的功能,如Linux可以使用支持符号连接的Ext3格式,Windows则可以使用FAT32或者NTFS格式。
[0038]需要说明的是,从只读介质上启动操作系统有以下步骤:
S310.载入引导程序(boot loader),简单地说,引导程序在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备。
[0039]S311.引导程序将操作系统内核载入内存,然后将控制权转交给内核。
[0040]S312.接着,内核载入所需的其他系统文件,完成操作系统启动。这些系统文件通常是压缩处理且可虚拟挂载的镜像文件的形式,例如Windows系统的WM,Linux系统的SquashFS,大幅减少了所需的存储空间。
[0041]需要说明的是,S312所述载入所需的其他系统文件,可以采用以下两种方式:S312a.将系统文件全部加载到内存中,从内存中启动,这种方式内存大小要求较高,启
动速度快。
[0042]S312b.直接从只读介质启动系统文件,这种方式对内存大小的要求较低,但会增加启动时间,在某些低速存储介质上,系统的整体运行速度可能不理想。
[0043]进一步的,在S312所属的系统文件载入后,这些系统文件所在的分区会进入虚拟写保护模式,在其运行环境下,无法对操作系统文件和其他只读存储装置进行实际的写入操作,所以不会损坏其中的数据,系统在重启动后,内存中的临时改动全部丢失,系统恢复到最初状态。
[0044]上述实施方式的步骤可以被认为是用于实现逻辑功能的一系列指令列表,其的全部或部分功能可以使用软件、固件、硬件或其组合来实现。例如,将软件或固件存储在机器可读介质上,通过相应的系统程序来执行。
[0045]其中,机器可读介质可以使用下列方式实现:包括半导体随机存取芯片(如RAM)、浮栅晶体管存储器(如闪存、可擦除可编程只读存储器EPR0M、电可擦除可编程只读存储器EEPR0M)、磁盘、光盘和网络存储器。
【权利要求】
1.一种防止固件升级失败的方法,其特征是该方法包括以下步骤:1)启动设备,开机进入操作系统后,进入固件校验程序,对可更新固件中的文件内容和已安装的应用程序文件内容进行合法性和一致性校验;2)通过了合法性和一致性校验,则退出固件校验程序,执行已安装的应用程序;3)未通过合法性和一致性校验,则在可更新固件和原始固件中选择一个较佳的版本,执行固件升级程序;4)固件升级程序完成后,重新启动设备,重复步骤I)进入固件校验程序。
2.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的操作系统、固件校验程序以及原始固件和固件升级程序、可更新固件都保存在设备中的只读存储器中,其内容通过程序或者用户操作修改。
3.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的保存在设备中的可读写存储器中,其内容全部来自可更新固件或者原始固件。
4.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的合法性和一致性的校验,包含以下步骤:a.检查可更新固件是否能够支持该设备的型号或固有识别号是否合法;b.使用冗余校验算法CRC、MD5或SHAl ;c.将可更新固件中的文件和已安装的应用程序文件逐一进行比对,如果已安装的应用程序的任何一个文件丢失或者校验结果不符,则一致性校验不通过。
5.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的原始固件,它是具有完整功能的普通固件或是为了减少存储空间占用而定制的简化版本,该简化版本至少应能够提供固件升级的功能。
6.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的在可更新固件未损坏的情况下,优先选择可更新固件,否则选择原始固件。
7.根据权利要求1所述的一种防止固件升级失败的方法,其特征是所述的在本权利要求涉及的运行环境中,无法通过应用程序或者用户操作的方式修改其中的内容,只读存储器使用固化的硬件实现,或使用底层软件虚拟保护的方式实现。
8.一种防止固件升级失败的设备,其特征是包含只读存储装置和可读写存储装置,所述的只读存储装置,包含以下模块:a.操作系统模块,用于管理设备的硬件与软件资源,为其他模块提供运行环境;b.固件校验和升级模块,用于在应用程序模块损坏或需要更新的情况下,根据可更新固件存储模块的内容,自动修复应用程序模块,从而确保应用程序模块总是能够工作,或者自动更新应用程序模块,使其保持在最佳的工作状态,该模块还用于在可更新固件存储模块损坏的情况下,使用原始固件存储模块自动替换可更新固件存储模块,从而确保恢复设备的基本功能,以便重新升级;c.原始固件存储模块,用于保存一个一定能够正常运行的版本的固件,本身不可执行;所述的可读写存储装置,包含以下模块:a.可更新固件存储模块,用于保存新版本的固件,本身不可执行;b.应用程序模块,用于提供设备的实际功能,应用程序可以在操作系统模块提供的环境下执行,在通过固件校验模块的校验之后启动,本模块所述的应用程序来自可更新固件存储模块。
【文档编号】G06F11/14GK103455354SQ201310400667
【公开日】2013年12月18日 申请日期:2013年9月6日 优先权日:2013年9月6日
【发明者】王强, 吴磊, 卫刚 申请人:南京南自信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1