发明内容
本发明提供一种更新固件方法,能够避免因更新中断所造成系统毁损的问题。
本发明提供一种嵌入式电子装置,可于断电而重新开机之后,在原写入进度的基础上继续写入前次未更新的固件码。
本发明提出一种更新固件方法,适于嵌入式电子装置。上述嵌入式电子装置包括第一储存单元及第二储存单元,而第二储存单元具有设定档分区、资料分区以及系统分区,且系统分区至少储存有嵌入式电子装置的固件。本方法包括下列步骤。下载固件套件至第一储存单元,其中固件套件包括安装资讯档案以及多个固件码档案。接着,将安装资讯档案与这些固件码档案分别写入至设定档分区与资料分区。之后,重新启动嵌入式电子装置,并执行系统分区中的启动程序以执行固件写入操作。固件写入操作包括:依据设定档分区中的安装资讯档案,依序自资料分区读取各固件码档案,以写入至系统分区;并且,在每次各固件码档案写入完成时,更新设定档分区中的写入进度,以在断电重新启动嵌入式电子装置之后,由启动程序依据写入进度继续将余下的固件码档案写入至系统分区。
在本发明的一实施例中,上述执行固件写入操作的步骤还包括:分别判断各固件码档案的档案大小是否超过预定大小。若档案大小超过预定大小,则在每次写入预定大小之后,即更新写入进度,并在整个固件码档案写入完成时,更新写入进度。相反地,若档案大小未超过预定大小,则在每次各固件码档案写入完成时,更新写入进度。
在本发明的一实施例中,在上述下载固件套件至第一储存单元的步骤之后,检查第一储存单元的剩余容量是否满足资料分区中的本机资料。若第一储存单元的剩余容量满足本机资料,则将资料分区中的本机资料备份至第一储存单元,之后,自资料分区抹除本机资料。
在本发明的一实施例中,在上述执行启动程序的步骤之后,判断设定档分区中的安装资讯档案是否符合更新条件。若符合更新条件,则透过启动程序执行固件写入操作。若不符合更新条件,则检查写入进度,以判断这些固件码档案是否已全部写入至系统分区中。当判定这些固件码档案已全部写入至系统分区时,格式化资料分区,并在将备份于第一储存装置的本机资料恢复至资料分区之后,删除设定档分区的安装资讯档案。相反地,当设定档分区中的安装资讯档案不符合更新条件,且判定这些固件码档案尚未全部写入至系统分区时,则关机,或者进入下载模式以重新下载固件套件。
在本发明的一实施例中,上述固件写入操作的步骤还包括解密并初始化系统分区中的分区表。
在本发明的一实施例中,上述将安装资讯档案与固件码档案分别写入至设定档分区与资料分区的步骤,其是在以二进制方式记录安装资讯档案至设定档分区之后,解析固件套件的标头讯息,进而依据标头讯息,利用二进制方式将固件码档案写入至资料分区,而将固件码档案转换为镜像资料。
在本发明的一实施例中,在上述下载固件套件至第一储存单元的步骤之后,还可验证固件套件的循环冗余检查(Cycle Redundancy Check,CRC)码。
在本发明的一实施例中,上述第一储存单元例如是微安全数位(Micro SD,SD=Secure Digital)卡,上述第二储存单元例如是与非门快闪记忆体(NANDflash)。
在本发明的一实施例中,上述资料分区为快闪转译层(Flash TranslationLayer,FTL)分区,上述设定档分区为无线更新固件(Firmware Over-the-Air,FOTA)分区。
在本发明的一实施例中,上述启动程序例如为原来设备制造商二级启动程序(Original Equipment Manufacturer Secondary Boot Loader,OEMSBL)。
在本发明的一实施例中,上述系统分区用以储存分区表、OEMSBL、高等移动用户软件(Advanced Mobile Subscriber Software,AMSS)以及QC二级启动程序(Qualcomm Secondary Boot Loader)。
本发明还提出一种嵌入式电子装置,包括第一储存单元、第二储存单元以及处理单元。第一储存单元用以储存所载入的固件套件,其中固件套件包括安装资讯档案以及多个固件码档案。第二储存单元具有设定档分区、资料分区以及系统分区,系统分区至少储存嵌入式电子装置的固件。处理单元耦接第一储存单元与第二储存单元,处理单元用以下载固件套件至第一储存单元,并且自第一储存单元取出安装资讯档案与固件码档案,以分别写入至设定档分区与资料分区;之后,重新开机,并执行系统分区中的启动程序以执行固件写入操作。上述固件写入操作包括:依据设定档分区中的安装资讯档案,依序自资料分区读取固件码档案,以写入至系统分区,并在每次各固件码档案写入完成时,更新设定档分区中的写入进度,以在断电重新启动嵌入式电子装置之后,由启动程序依据写入进度继续将余下的固件码档案写入至系统分区。
基于上述,本发明是针对当前固件套件更新过程中的中止问题,也就是当更新过程中发生断电或其他意外而重新开机时,能够在前次写入进度的基础上继续更新余下的固件码档案,增加更新固件的成功率。换言之,在固件写入过程中记录固件的写入进度,从而保证在写入过程的任何阶段中,即便嵌入式电子装置重启,亦能够继续更新。
为让本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合附图作详细说明如下。
附图说明
图1是依照本发明一实施例所绘示的更新固件方法的流程图。
图2是依照本发明一实施例所绘示的写入安装资讯档案与固件码档案的方法流程图。
图3是依照本发明一实施例所绘示的固件写入操作的方法流程图。
图4是依照本发明一实施例所绘示的嵌入式电子装置的方块图。
图5是依照本发明一实施例所绘示的第二储存单元的示意图。
图6是依照本发明一实施例所绘示的NAND快闪记忆体的示意图。
主要元件符号说明
400:嵌入式电子装置
410:处理单元
420:第一储存单元
430:第二储存单元
510、610:系统分区
520:设定档分区
530:资料分区
600:与非门快闪记忆体
611:MIBIB
612:QCSBL
613:OEMSBL
614:AMSS
620:FOTA分区
630:FTL分区
S105~S130:本发明一实施例更新固件方法各步骤
S205~S220:本发明一实施例写入安装资讯档案与固件码档案的方法各步骤
S305~S360:依照本发明一实施例固件写入操作的方法各步骤
具体实施方式
针对以与非门快闪记忆体(NAND flash)为载体的嵌入式电子装置,在进行更新的环节上都无法做到断电之类的中断安全保护,因而往往在固件更新过程发生断电或者人为中止都会带来无法弥补的设备瘫痪。据此,本发明提出一种嵌入式电子装置及更新其固件的方法,以实现重新开机后在原写入进度的基础上继续更新的方法,进而增加固件的更新成功率。
图1是依照本发明一实施例所绘示的更新固件方法的流程图。本实施例是以嵌入式电子装置为对象来进行固件的更新,嵌入式电子装置包括第一储存单元与第二储存单元,而上述第二储存单元具有设定档分区、资料分区以及系统分区。
请参照图1,首先,在步骤S105中,下载固件套件至第一储存单元,其中固件套件包括安装资讯档案(Setup Information file)以及多个固件码档案。在此,安装资讯档案例如为INF档案,其用以记录各个固件码档案所欲对应写入的区段(section)位址等资讯,藉以进行固件码档案的写入。
进一步地说,无线下载固件套件例如是透过使用者介面(User Interface,UI)来完成。另外,在下载固件套件至第一储存单元之后,还可透过使用者介面来验证固件套件的循环冗余检查(Cycle Redundancy Check,CRC)码,以确认固件套件的完整。再者,倘若使用者介面在下载固件套件之前检测到第一储存单元中已经存在固件套件时,便会停止无线下载请求,而进入下一个步骤。
在本实施例中,第一储存单元例如为可插拔TF(TransFlash)卡(即,微安全数位(Micro SD)卡),其支持无线(Over-the-Air,OTA)交换资料;而第二储存单元例如NAND快闪记忆体,以做为嵌入式电子装置的载体。然,在此仅为举例说明,并不以此为限。
接着,在步骤S110中,将安装资讯档案与固件码档案分别写入至设定档分区与资料分区。详细地说,在将第一储存单元中的固件套件解析至第二储存单元时,安装资讯档案会以二进制方式记录至设定档分区。此时,将提示开始更新固件套件。之后,开始解析固件套件的标头讯息,以依据标头讯息,把固件套件中的固件码档案撷取出来并写入第二储存单元的资料区块,而转换为镜像资料。
也就是说,先将安装资讯档案与固件码档案转换为可直接读取的镜像资料,而储存至第二储存单元中,使得不支持档案系统(file system)的启动程序(bootloader)亦能够直接自第二储存单元来读取固件码档案。
之后,在步骤S115中,重新启动嵌入式电子装置,并在重启之后,执行系统分区中的启动程序。然后,如步骤S120所示,透过启动程序来执行固件写入操作。在此,固件写入操作包括步骤S125与步骤S130。
在步骤S125中,依据设定档分区中的安装资讯档案,依序自资料分区读取各个固件码档案,而将各个固件码档案写入至系统分区。并在每次固件码档案写入完成时,如步骤S130所示,更新设定档分区中的写入进度。据此,在断电重新启动嵌入式电子装置之后,启动程序可依据写入进度继续将余下的固件码档案写入至系统分区。
值得注意的是,在将固件码档案写入系统分区之前,可先判断欲写入的一个固件码档案的档案大小是否超过预定大小(例如5MB)。若档案大小超过5MB,则在每次写入5MB的固件码档案之后,即更新写入进度。并且,在整个固件码档案写入完成时,亦会再次更新写入进度。相反地,若档案大小未超过5MB,则在每次固件码档案写入完成时,再更新写入进度即可。例如,若固件码档案为8MB时,在写入至5MB时即会记录写入进度,而在8MB全部写入完成时会再次记录写入进度。
图2是依照本发明一实施例所绘示的写入安装资讯档案与固件码档案的方法流程图。请参照图2,在下载固件档案至第一储存单元的步骤S105之后,写入安装资讯档案与固件码档案至第二储存单元将详述如下。在步骤S205中,检查第一储存单元的剩余容量是否满足资料分区中的本机资料,也就是检查第一储存单元的剩余容量是否足够储存本机资料。若第一储存单元的剩余容量满足本机资料时,如步骤S210所示,将资料分区中的本机资料备份至第一储存单元。之后,在步骤S215中,将资料分区的本机资料抹除。然后,如步骤S220所示,将安装资讯档案与固件码档案分别写入至设定档分区及资料分区,其详细过程如上述图1的步骤S110所述,在此不再详述。
相反地,若第一储存单元的剩余容量不满足本机资料时,如步骤S225所示,提示固件套件备份失败,并退出更新程序。
图3是依照本发明一实施例所绘示的固件写入操作的方法流程图。请参照图3,在执行启动程序的步骤S115之后,固件写入操作的步骤将详述如下。在步骤S305中,启动程序自设定档分区读取安装资讯档案,以如步骤S310所示,判断安装资讯档案是否符合更新条件,例如固件套件的版本是否为最新版。接着,在步骤S315中,启动程序将分区表解密并初始化,而依据分区表来进行后续写入动作。之后,在步骤S320中,启动程序依据安装资讯档以及写入进度,自资料分区中依序读取对应的固件码档案以写入至系统分区,并在写入完成之后,更新写入进度。在此,写入进度是安装资讯档中其中一个栏位,而在其他实施例中,写入进度亦可为资料分区中不同于安装资料档的另一个档案。
在完成固件的更新之后,如步骤S330所示,重新启动嵌入式电子装置,而重复执行步骤S115。同样地,如步骤S305、S310所示,启动程序自设定档分区中读取安装资讯档案并判断其是否符合更新条件。倘若判定安装资讯档案并判断其并不符合更新条件(例如固件套件的版本并非为最新版),则如步骤S335所示,进一步判断固件码档案是否已全部写入至系统分区中。若是,则表示固件码档案已全数更新完毕,据此,如步骤S340所示,藉由启动程序将资料分区格式化,以抹除资料分区中的固件码档案。接着,在步骤S345中,启动程序将备份于第一储存装置的本机资料恢复至资料分区中。之后,如步骤S350所示,启动程序删除设定档分区的安装资讯档案。最后,如步骤S355所示,重新启动嵌入式电子装置,并正常开机。
另一方面,倘若设定档分区中的安装资讯档案不符合更新条件,且固件码档案亦尚未全部写入至系统分区时,表示固件套件为不合法状态或是固件套件下载不完全,因此如步骤S360所示,关机,或者进入下载模式以重新下载固件套件。
以下再举一实施例来说明使用上述方法的嵌入式电子装置。图4是依照本发明一实施例所绘示的嵌入式电子装置的方块图。请参照图4,嵌入式电子装置400包括处理单元410、第一储存单元420以及第二储存单元。其中,处理单元410耦接至储存所载入固件套件的第一储存单元420以及做为载体的第二储存单元430。
上述第二储存单元430具有设定档分区、资料分区以及系统分区。举例来说,图5是依照本发明一实施例所绘示的第二储存单元430的示意图。请参照图5,第二储存单元430包括系统分区510、设定档分区520以及资料分区530。其中,系统分区510中至少储存有嵌入式电子装置的固件,而设定档分区520用来储存例如安装资讯档案(例如fw.inf)等设定档,资料分区530则是用来储存本机资料。
另外,处理单元410用以将固件套件下载至第一储存单元420,之后,再自第一储存单元420取出安装资讯档案与固件码档案,以分别写入至设定档分区520与资料分区530;之后,重新开机,并执行系统分区510中的启动程序,例如原来设备制造商二级启动程序(Original Equipment Manufacturer Secondary BootLoader,OEMSBL),以执行固件写入操作。在此,固件写入操作的方法已于上述步骤S120、S305~S360中详细说明,故在此不再赘述。
以下即以与非门(NAND)快闪记忆体为例来说明固件的更新程序。图6是依照本发明一实施例所绘示的NAND快闪记忆体的示意图。请参照图6,NAND快闪记忆体600至少包括系统分区610、无线更新固件(Firmware Over-the-Air,FOTA)分区620与快闪转译层(Flash Translation Layer,FTL)分区630。其中,系统分区610包括分区表(例如MIBIB)611、QC二级启动程序(Qualcomm Secondary BootLoader,QCSBL)612、OEMSBL 613以及高等移动用户软件(Advanced MobileSubscriber Software,AMSS)614。而上述FOTA分区620及FTL分区630的功能分别与上述设定档分区520及资料分区530相同,在此省略不提。
在本实施例中,第一储存单元例如为TF卡,固件套件的安装资讯档案例如为fw.inf。另外,fw.inf包括用以记录写入进度的fw_status,其至少包括:准备开始进行固件更新(FW_READY_TO_UPDATE)的状态以及做为代表各固件码档案(FW_IN_PARTI_INIT、FW_IN_QCSBL、FW_IN_OEMSBL、FW_IN_AMSS),藉以表示目前的写入进度。
以下即搭配上述图1的步骤S105~步骤S130来进一步描述。在如步骤S105所示而将固件套件下载至TF卡时,fw.inf会在无线更新固件阶段即生成于TF卡。之后,步骤S110的详细描述如下:解析TF卡中的固件套件至NAND快闪记忆体600中时,fw.inf是以二进式的形式记录于FOTA分区620的起始位置,其占用1个区块(block),为32页(page)共16KB。此时,将会提示有新版本的固件套件欲进行更新。之后,再将固件套件的标头讯息共256位元组连缀到TF卡中的fw.inf档,以按照标头讯息,将固件套件中固件码档案撷取出来并写入至NAND快闪记忆体600(从FTL分区630的第一个区块开始写入)。
当TF卡中的固件码档案全部写入至FTL分区630之后,再对FTL分区630中的固件码档案进行CRC校验。校验成功,则将FOTA分区620中的fw.inf中的fw_status更新为FW_READY_TO_UPDATE。上述fw.inf将写入FOTA分区620(坏块顺延),并且会另外对fw.inf做一个备份写在FOTA分区620的下一个区块(坏块顺延)。
值得注意的是,接下来如步骤S120所示的固件写入操作是在OEMSBL 613下实现。藉由OEMSBL 613来搜寻FOTA分区620,而得到fw_inf的资料结构,接着判断fw_inf的fw_status是否为FW_READY_TO_UPDATE,以确认FTL分区630中固件码档案以及fw_inf标头讯息均正常。相反地,倘若固件套件的写入状态fw_status并非为FW_READY_TO_UPDATE,则确定目前的写入进度,以继续更新操作。
而每当更新完成一个固件码档案时,便会更新写入进度fw_status。例如,其中一个固件码档案AMSS写入完成之后,fw_status即会更新为FW_IN_AMSS。然在此仅为举例说明,并不以此限制其范围。
另外,值得一提的是,对于较大的固件码档案(例如大于5MB),除了更新写入进度fw_status之外,另外更可以5MB为单位记录至另一个例如为fw_process(其亦位于fw.inf中)的栏位中,直到更新结束。如在更新过程中糟遇中途断电,则在重新启动后,参照fw.inf中的fw_status以及fw_process便能够继续后续的更新。
综上所述,本发明是在档案系统支持下获得固件套件,并先将固件套件先转换为可直接读取的镜像资料,以便使得不支持档案系统的启动程序能够直接提取固件套件,进而实现固件更新动作。并且在更新过程中记录固件码档案的写入进度,从而保证在写入过程的任何阶段中,即便嵌入式电子装置重启,皆能够继续更新,而在前次写入进度的基础上继续更新余下的固件码档案,增加更新固件的成功率。
虽然本发明已以实施例揭示如上,然其并非用以限定本发明,任何所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视后附的申请专利范围所界定为准。