交叉式固件升级方法

文档序号:6373496阅读:355来源:国知局
专利名称:交叉式固件升级方法
技术领域
本发明有关一种具有双拷贝升级的稳定性及单拷贝仅占用较小储存空间优点的固件升级方法。
(2)背景技术对于一个出厂后仍有可能需要进行作软件更新的间接地址或指令地址(IA)或嵌入式系统产品种类而言,更新过程中有许多种原因可能会造成更新过程的不正常结束,包括切断电源、网络连线中断(或无法连线)、伺服器停止运作(或地址设定不正确)…,这些不正常结束的情况可能导致产品必须送厂重新烧录软件,造成使用者的不方便。为解决前述问题,目前已有所谓的可信赖固件升级方法(Reliable Firmware Upgrade Algorithm),而最常见的是双拷贝固件升级方法(Two Copy Firmware Upgrade Algorithm),但这样的作法必须占用两倍的软件程序储存空间而形成浪费,其具体问题谨详述如后现在常用的软件存放方主要有两种,一是完全不作保护的单拷贝(one copy)方式,二是具有软件更新保护功能的双拷贝(two copy)方式首先,单拷贝固件升级方法(One Copy Firmware Upgrade Algorithm)是原始的软件更新方式,在空间上只保存一份软件程序,但是完全不考虑软件更新时可能发生的错误,故只有单一拷贝的软件程序在更新失败时即必须送厂修复,无法单靠产品本身修复内部软件的错误。
双拷贝固件升级方法(Two Copy Firmware Upgrade Algorithm)是安全性相对较高的软件更新方式(如美国发明专利第5878256、6357021号),主要是在产品内部保存两份软件程序的拷贝,当软件更新时会升级其中一份,若更新过程失败,还能够利用另一个拷贝开机,并重新下载新版本软件。前述方法有多种变形,包括两份拷贝可以是不同的版本、每次升级都只更新同一个位置的拷贝,另一份拷贝则永远不更新(如美国发明专利第6009500、6253281、6357021、6536038号等)。前述方式的优点在于可保障软件的可靠性,缺点是两份软件程序拷贝造成储存空间的浪费,在程序未压缩的情况下需要极大的储存空间,而软件程序固然可以通过压缩而减少占用储存空间,但一旦使用程序压缩,则将会影响到开机速度。
由上述可知,既有固件升级方法不论是单拷贝或双拷贝方式都分别存在其缺点前者可靠性低,发生错误时即必须送厂重新烧录软件,造成使用不便;后者相对可靠性高,但须占用大量储存空间;故既有升级技术因前述因素而陷入两难。
然而,当省视前述问题的根源时,会发现所谓可信赖固件升级方法的问题本质,即是思考如何在升级的任何阶段被中断都有回复状的能力;其反映出之所以必须存放两份拷贝的目的,即是为了维持重新开机及重新启动软件更新流程的能力,换言之,其意味着整份程序码中需要保护的只有开机及下载协定的部分,因此只需要将此部分独立出来作特殊处理,便可同时兼顾稳定性、可靠性,并解决储存空间浪费的问题。
(3)发明内容因此,本发明主要目的是在节省空间与提升稳定性的考虑下,提供一个具有双拷贝升级的稳定性及单拷贝较小储存空间优点的固件升级方法。
为达到前述目的采取的主要技术手段是先定义一软件由一启动装载器、一启动数据及一应用数据组成,其中启动数据仅包含重新开机及启动软件更新流程的启动码与相关协定,且程序码占用空间小于应用数据;前述软件进行升级时,是先清空应用数据以空出一第一储存空间,又下载一新版启动数据存放于第一储存空间,随后移除旧版的启动数据并空出一第二储存空间,最后下载新版应用数据存放在第二储存空间,以完成更新升级;而该软件启动时,则由启动装载器判断并选择执行启动数据,随后由启动数据载入应用数据并执行;在前述的升级方法中,因是交替的下载/清除新旧版的启动数据与应用数据,当更新过程中的任何时间出现中断时,仍都有一份完整的启动数据可供开机与启动更新流程功能之用,有效确保了更新过程的稳定度与可靠性;另外,前述方法亦同时配合储存空间的交换,故只需使用单拷贝的储存空间;由上述可知,本发明不仅确保了软件升级时的可信赖度,更排除了双拷贝更新方法造成储存空间浪费的问题。
(4)


图1是本发明的软件组成示意图。
图2A~E是本发明更新软件时的一储存空间交换状况示意图。
图3A~E是本发明更新软件时又一储存空间交换状况示意图。
图4是本发明的软件启动流程图。
图5是本发明的软件升级流程图。
(5)具体实施方式
首先如图1所示,本发明是先一定义软件由下列的三个部份组成其分别为一启动装载器(boot loader)10、一启动数据(boot image)20及一应用数据(application image)30;其中该启动装载器10是一个启动时执行的程序,具有简单的判断机制,藉以选择特定地址上的启动数据20复制至存储器(RAM)中并予执行,而启动装载器10在出厂后即永远不被更新;该启动数据20是包含有启动码(boot code)及微控制码(Micro-Controller Code);其中,该微控制码可以是完整的硬件驱动程序及硬件支援应用程序接口(API),或只是包含开机及网络相关必须的硬件支援、网络基本协定(TCP/IP、DHCP等)以及下载协定(FTP、TFTP等)。该启动数据20并负责对硬件进行初始化后,将应用数据30从特定地址复制到存储器中继续执行;该应用数据30包含剩余的微控制码(Micro-Controller Code)、完整的网络功能协定、状态机(state machine)等。
根据软件分割的作法区分,该启动数据20与应用数据30的分割可以利用下列两种方式
第一种方式是让启动数据20与应用数据30二者分别有一份实时操作系统(RTOS),在此状况下,表示启动数据20与应用数据30各自为完整可执行的数据(image),该启动数据20在本身执行完成后,将应用数据30载入到存储器中以取代启动数据20继续执行。
本发明采用的第二种方式则只保留一份RTOS在启动数据20中;亦即将具有重新开机及启动软件更新流程功能的部份规划到启动数据20,其余部份规划到应用数据30;由于启动数据20只具备基本的开机与启动更新流程功能、基本网络协定,而不含状态机与大部份的协定层(protocol stack),故其程序码所储存的空间将小于应用数据30,藉此可利用更新过程中通过清除应用数据30所释放出来的储存空间,存放由伺服器下载的数据(image)。
又请参阅图2所示,是本发明更新软件时的储存空间交换示意图,首先如图2A所示,是储存空间的原始状态,其中启动装载器10的区块位置永远不变,启动数据20与应用数据30的区块起始点分别为b1、a1。在进行软件更新时,是先将应用数据30清空,以空出一第一储存空间31(如图2B所示),接着下载新版的启动数据20’,并存放在清空应用数据30后所释放出来的第一储存空间31中(区块起始点更新为b2)(如图2C所示),再将旧版的启动数据20移除以空出储存空间,加上储存新版启动数据20’后所剩下的储存空间构成一第二储存空间21(如图2D所示),接着下载新版的应用数据30’,并将下载的新版应用数据30’存放前述的第二储存空间21内(区块起始点更新为a2)(如图2E所示);因此,当软件下载结束,启动数据20和应用数据30的起始点将移位到新的位置b2,a2,而下次开机时启动装载器10即从新的位置复制启动数据20到存储器。
而前述软件如再经过另一次更新后,该启动数据20和应用数据30将会回到原始的位置b1,a1(如图3A~E所示)。
由上述说明可以明显看出本发明的两项特点1.只使用单拷贝的储存空间由前述可以明显看出,本发明在更新软件的过程中,是交叉的使用一既有容量的储存空间,换言之,只使用单拷贝的储存空间,即可稳定的完成软件更新。
2.具有双拷贝软件升级方法的稳定度与可靠性其最重要的突破在于允许出现在更新过程中任何阶段的错误,主要原因是不论更新过程在那一个阶段中断失败,软件中均仍保留了一个完整的启动数据,可供作为重新开机及启动软件更新流程用,故即使软件更新失败,亦可在重新开机后重新执行软件更新。
本发明启动软件的详细流程是如图4所示,启动时,该启动装载器10程序将先被执行,并选择由那一个区块将启动码(boot code)复制到存储器,其选择方式是检查存放的系统变数BootVar(该变数可储存在NVRAM或Flash中),主要作用在记录开机时应启动那一个启动数据20区块,当其值为1代表第一个区块b1,其值为2代表第二区块b2,若为其他数值则仍使用第一个区块b1;在决定启动数据20的起始位置后,启动装载器10会判断启动数据20的总值检查(check sum)是否正确(301),如不正确,启动装载器10将检查另一个启动数据20是否存在(303)(如果更新曾失败,且发生在下载新版启动数据之后,则软件中即可能存在二份启动数据),如果存在,则判断其总值检查(check sum)是否正确(303),如正确时,启动装载器10将改成执行第二份启动数据20,并将系统变数(BootVar)设定为由该份启动数据20开机(304);当启动码执行完毕后,将根据系统变数(BootVar)决定应用数据30所在的区块(305)并判断其总值检查(check sum)(306);若该应用数据30区域不存在或总值检查不正确,该启动码则将执行软件更新程序(307),重新下载一份启动数据20与应用数据30。
反之,若该应用数据30区块存在且通过总值检查(check sum),则启动码会将应用数据30复制到存储器中并予以执行(308)。
如果前述的第二份启动数据20不存在,即表示启动数据20不是在更新过程中损坏,因而无法自动复原,故此时可另以硬件(例如指示灯)显示错误信息(309),以通知使用者将产品送厂修复。
至于本发明更新软件时的详细流程是如图5所示;造成软件更新的原因包括当应用数据30不存在或不完整时,及版本过旧时(由使用者或伺服器端促使执行下载新版本软件的动作)皆会启动软件更新的流程。
当软件进行更新时,首先会检查系统变数(BootVar)(400),若为1是表示需释放的应用数据30储存空间起始点在a1位置(401),若为2是表示需释放的应用数据30储存空间起始点在a2位置(402),接着程序会清除快闪存储器(Flash)中属于应用数据30部份的区块(block),随后将下载新版本的启动数据20存放在释放出来的储存空间(404,404),亦即系统变数为1,即存放在b2的位置,若系统变数为2则存放在b1的位置;经下载完毕后,程序会判断启动数据20的总值检查(checksum)(405,406),若通过检查,即将系统变数(BootVar)设在新版的启动数据20位置,并将原本的启动数据20移除,若未能通过检查,则须重新下载启动数据20;接着从伺服器下载新版的应用数据30,并储存在剩下的空间(407,408),且进行总值检查(checksum)(409,410),若未能通过检查则重新下载应用数据30(407,408),若通过检查则表示软件更新完成,即改变系统变数(411,412),并重新开机(413)以启动新版本的软件。
由上述可知,本发明主要作用在于软件更新过程的任何阶段皆至少有一份启动数据是完整且可被执行的,所以,在软件更新过程的任何时候如发生中断更新的情形,例如拔掉电源或网络线等,皆可利用该启动数据开机并重新下载软件。且前述方法只约使用了单一拷贝的储存空间,同时解决了双拷贝固件升级方法浪费大量储存空间的缺点,故本发明兼具双拷贝/单拷贝固件升级方法的优点,并同时克服二者的缺陷。
权利要求
1.一种交叉式固件升级方法,是先定义一软件是由一启动装载器、一启动数据及一应用数据组成,其中该启动数据仅包含重新开机及启动软件更新流程的启动码与相关协定,且其程序码占用空间小于应用数据;前述软件进行升级时,是先清空该应用数据以空出一第一储存空间,又下载一新版启动数据存放于该第一储存空间,随后移除旧版的该启动数据以空出一第二储存空间,最后下载新版应用数据存放在该第二储存空间,以完成更新升级。
2.如权利要求1所述的交叉式固件升级方法,其特征在于,该启动装载器是启动时执行的程序,具简单的判断机制,以选择特定地址上的启动数据复制至存储器中并予执行。
3.如权利要求1或2所述的交叉式固件升级方法,其特征在于,该启动装载器的内容永不更新。
4.如权利要求1所述的交叉式固件升级方法,其特征在于,该启动数据包含有一启动码及一微控制码,并负责对硬件进行初始化之后,将应用数据从特定地址复制到存储器中继续执行。
5.如权利要求4所述的交叉式固件升级方法,其特征在于,该微控制码只包含开机及网路相关必需的硬件支援、网络基本协定TCP/IP、DHCP等以及下载协定FTP、TFTP等。
6.如权利要求5所述的交叉式固件升级方法,其特征在于,该应用数据包括除启动数据中以外的微控制码、完整的网络功能协定、状态机等。
7.一种软件数据结构,是由一启动装载器、一启动数据及一应用数据组成,其中该启动数据仅包含重新开机及启动软件更新流程的启动码与相关协定,且其程序码占用空间小于该应用数据。
8.如权利要求7所述的软件数据结构,其特征在于,该启动装载器是启动时执行的程序,具有简单的判断机制,以选择特定地址上的启动数据复制至存储器中并予执行。
9.如权利要求8或9所述的软件数据结构,其特征在于,该启动装载器的内容永不更新。
10.如权利要求9所述的软件数据结构,其特征在于,该启动数据包含有一启动码及一微控制码,并负责对硬件进行初始化之后,将该应用数据从特定地址复制到存储器中继续执行。
11.如权利要求10所述的软件数据结构,其特征在于,该微控制码只包含开机及网络相关必需的硬件支援、网络基本协定TCP/IP、DHCP等以及下载协定FTP、TFTP等。
12.如权利要求11所述的软件数据结构,其特征在于,该应用数据包括除启动数据中以外的微控制码、完整的网络功能协定、状态机等。
13.一种储存媒体,具有如权利要求1所述的交叉式固件升级方法,该方法是先定义一软件是由一启动装载器、一启动数据及一应用数据组成,其中该启动数据仅包含重新开机及该启动软件更新流程的启动码与相关协定,且其程序码占用空间小于应用数据;所述软件进行升级时,是先清空应用数据以空出一第一储存空间,又下载一新版启动数据存放于该第一储存空间,随后移除旧版的启动数据以空出一第二储存空间,最后下载新版应用数据存放在该第二储存空间,以完成更新升级。
14.如权利要求13所述的储存媒体,其特征在于,该启动装载器是启动时执行的程序,具有简单的判断机制,以选择特定地址上的启动数据复制至存储器中并予执行。
15.如权利要求13或14所述的储存媒体,其特征在于,该启动装载器的内容永不更新。
16.如权利要求13所述的储存媒体,其特征在于,该启动数据包含有一启动码及一微控制码,并负责对硬件进行初始化之后,将应用数据从特定地址复制到存储器中继续执行。
17.如权利要求16所述的储存媒体,其特征在于,该微控制码只包含开机及网络相关必需的硬件支援、网络基本协定TCP/IP、DHCP等以及下载协定FTP、TFTP等。
18.如权利要求17所述的储存媒体,其特征在于,该应用数据包括除启动数据中以外的微控制码、完整的网络功能协定、状态机等。
全文摘要
本发明是关于一种交叉式固件升级方法,是先定义一软件由一启动装载器、一启动数据及一应用数据组成,其中启动数据是包含重新开机及启动软件更新流程的启动码与相关协定,并令其程序码占用空间小于应用数据;当软件启动时,由启动装载器判断并选择执行启动数据,随后由启动数据载入应用数据并执行;俟进行升级时,是先清空应用数据以空出一第一储存空间,又下载一新版启动数据存放于第一储存空间,随后移除旧版的启动数据并空出一第二储存空间,最后下载新版应用数据存放在第二储存空间,以完成更新升级;利用前述交叉交换储存空间的软件更新技术,可兼顾更新过程的稳定性及储存空间的减少。
文档编号G06F9/445GK1567199SQ0314945
公开日2005年1月19日 申请日期2003年6月16日 优先权日2003年6月16日
发明者林书毅, 李元兵, 李光耀 申请人:纬创资通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1