背景技术
路由器(router)、个人数字助理(personal digital assistant,简称PDA)、或手机等通讯装置其主要的执行程序如:开机程序、及硬件配置设定数据等皆包含在其固件,它的功能及效率影响了装置的整体表现。因此,软件工程尽相当大的努力在固件的开发与除错。
在一种产品上市后的一段时间,软件工程师通常仍会持续地对固件做修改。此修改通常包括执行效率的改进、程序代码的除错、新功能的加入、及针对客户需求所做的更动。一旦固件改变量达到一定的程度,软件工程师就会发行一套新版的固件,让使用者更新其装置。更新时先取得新版固件,然后将此新固件烧录到装置的闪存上。由于闪存的特性,此烧录过程不可被中断,一旦中断了,整区的数据将无法使用。
然而在实际应用中,烧录过程及有可能被各种因素打断,如突然的停电、插头被踢掉、或装置莫名的死机等。倘若只有一份固件在闪存上,且复写过程被中断,将导致此装置无法再次开机。此装置因此就须送修,维修人员必须卸下闪存,用专门的烧录器做重烧的补救动作。如此将造成使用者的不便,及维修成本的增加。
美国专利公开号20040068334,标题为“Method for updating firmware of computerdevice”的专利文件及美国专利号6,023,620,标题为“Method for downloading controlsoftware to a cellular telephone”的专利各提出了不同的固件更新中断的问题的解决方法。但是这些方法仍有一些固件更新时的问题未克服。20040068334的方法多了一个固件备份的工作,实为多余、耗时、没有效率。另外,即使运用了这些方法,如果不慎装置被升级的固件版本有问题,导致装置在开机过程会死机,仍然会使此装置无法使用。
发明内容
为了改善装置的固件的更新作业,本发明提供一种固件更新方法及使用所述方法的通讯装置。
一种通讯装置的实施方式包括:非挥发性内存、更新模块、加载模块及原固件。上述非挥发性内存包含第一旗标用以指定所述通讯装置开机用的固件,第二旗标用以指定是否要进行开机能力测试,以及第一区域用以储存所述通讯装置的原固件。上述更新模块取得新固件,并储存所述新固件于所述非挥发性内存中的第二区域。当完成储存所述新固件时,上述更新模块利用所述第一旗标用以指定所述开机用的固件为所述新固件,并利用所述第二旗标致能所述开机能力测试。上述加载模块在判定所述新固件是否能顺利运行以前,利用所述第一旗标以指定开机用的固件为所述新固件以外的另一固件,并且响应所述装置的开机动作,加载并运行所述新固件。其中,若所述新固件能运行,使所述装置符合条件,则所述通讯装置判定所述新固件通过所述开机能力测试,更动所述第一旗标的值,以指定所述新固件为开机用的固件。若所述新固件未通过所述开机能力测试,则所述通讯装置维持所述第一旗标的值。
一种固件更新方法的实施方式执行于具有非挥发性内存的通讯装置。所述非挥发性内存包含第一旗标用以指定所述通讯装置开机用的固件、第二旗标用以指定是否要进行开机能力测试、以及第一区域用以储存所述通讯装置的原固件。首先,取得新固件,并储存所述新固件于所述非挥发性内存中的第二区域。当完成储存所述新固件时,利用所述第一旗标用以指定所述开机用的固件为所述新固件,并利用所述第二旗标致能所述开机能力测试。在判定所述新固件是否能通过所述开机能力测试以前,利用所述第一旗标以指定开机用的固件为所述新固件以外的另一固件。响应所述装置的开机动作,加载并运行所述新固件。其中,若所述新固件能运行,使所述装置符合条件,则所述通讯装置判定所述新固件通过所述开机能力测试,更动所述第一旗标的值,以指定所述新固件为开机用的固件。若所述新固件未通过所述开机能力测试,则所述通讯装置不更动所述第一旗标的值。
另一种固件更新方法的实施方式执行于具有非挥发性内存的装置中。所述装置的原固件储存于所述非挥发性内存中的第一区域。首先,取得新固件,并储存所述固件于所述非挥发性内存中的第二区域。当完成储存所述新固件时,进行开机能力测试。所述开机能力测试还包含:在判定所述新固件是否能通过所述开机能力测试以前,利用旗标,以指定所述新固件以外的另一固件为所述装置开机用的固件;响应所述装置的开机动作,加载并运行所述新固件;若所述新固件能运行,使所述装置符合条件,则判定所述新固件通过所述开机能力测试,并更动所述旗标的值,以指定所述新固件为所述开机用的固件;以及若所述新固件未通过所述开机能力测试,则维持所述旗标的值。
利用所述的固件更新方法可以避免固件版本或设计错误所造成的开机问题。
具体实施方式
以下说明中的各模块可以是计算机可执行的程序或电路。
图1A为本发明通讯装置100的实施方式的结构方块图。在本实施方式中,通讯装置100包括处理器1、非挥发性内存2、通讯单元3、输入单元4及主存储器5。
非挥发性内存2可以是闪存(flash memory)或电子可抹除可程序化只读存储器(Electrically Erasable Programmable ROM,简称EEPROM)。图1A中的非挥发性内存2是简化的示意图,而非挥发性内存2实际上可以由单个或多个的内存芯片构成。
通讯单元3用来传送及接收数据。输入单元4可以包含用来启动及关闭通讯装置100的电源的开关。通讯装置100的固件可以包含其操作系统、应用程序、设定参数及其它信息。
所述通讯装置100的加载模块(Loader)10储存于所述非挥发性内存2中的区域20,原固件11储存于所述非挥发性内存2中的区域21。区域22可以用来储存新的固件。非挥发性内存2包含二个旗标BF及BC。旗标BF用以指定要供所述通讯装置开机用的固件,旗标BC用以指定是否要进行开机能力测试。开机用的固件所在区域可以称为「主区」,用来储存新固件的区域可以称为「备区」。旗标BF可用以指定非挥发性内存中的「主区」。举例来说,目前区域21为「主区」,而区域22为「备区」。需要了解的是,在上述通讯装置的其它实施方式中,其非挥发性内存可以有二个或更多的「备区」。
举例来说,区域21与22分别为非挥发性内存2的二个分割区(partition),且分别以分割区识别码“0”及“1”代表。旗标BF可以用一位(bit)记录分割区识别码“0”或“1”以指示用来开机的「主区」。在其它的实施方式中区域21与22何者为「主区」可以用储存于旗标BF中的内存位置或其它信息来识别。上述内存位置可以是区域21或22的开始地址或固件的所在地址。旗标BF及旗标BC可以各包含一比特(bit),但非限定于此。
通讯装置100具有更新模块13,用来从通讯装置100的外部取得新固件,并储存所述新固件于非挥发性内存2中的「备区」。当「备区」中有旧版的固件时,上述的新固件可以覆写上述旧版的固件。上述更新模块13可以被包含在加载模块10或任一固件(如固件11)中,或单独储存于非挥发性内存2中的一个位置。图1B至图1D中的通讯装置100B、100C及100D各为通讯装置100的实施方式。更新模块13B、13C及13D为更新模块13的实施方式。图1B中的更新模块13B整合于加载模块10;图1C中的更新模块13C整合于固件11;图1D中的更新模块13D单独存在于通讯装置100中。当更新模块13完成储存所述新固件时,上述更新模块13利用所述旗标BF用以指定所述开机用的固件为所述新固件,利用所述旗标BC指定是否要进行所述开机能力测试。
加载模块10在通讯装置100启动(开机)时加载旗标BF所指定的用来使通讯装置100开机的固件。
通讯装置100可以包含各种客户端设备(consumer premise equipment),例如机上盒(set-top box)、数字用户线(Digital Subscriber Line,简称DSL)调制解调器或有线电视调制解调器(cable modem)等整合式存取装置(Integrated access device)。通讯装置100可与另一装置通讯并从特定的服务器下载固件。参照图2,通讯装置100通过网络101通讯连接服务器120。服务器120储存多个固件于数据库121。通讯装置100可从服务器120下载新的固件。以下说明通讯装置100的固件更新流程。
假设旗标BF在目前记录0,意指区域21为「主区」。参照图3,通讯装置100中的上述更新模块13首先从服务器120取得新固件12(步骤S300),判断旗标BF中的「主区」为分割区0或1(步骤S302)。若「主区」为分割区0,即区域21,则上述更新模块13储存固件12于「备区」分割区1,即区域22(步骤S304)。若「主区」为分割区1,即区域22,则上述更新模块13储存固件12于「备区」分割区0,即区域21(步骤S314)。
在步骤S306中,上述更新模块13判别上述新固件12的储存动作是否成功(步骤S306)。如否,上述更新模块13标示「备区」的固件更新失败(步骤S308)。如是,上述更新模块13利用旗标BF以切换「主区」及「备区」(步骤S310),并利用旗标BC指定要进行所述开机能力测试(步骤S312)。举例来说,在本实施方式中旗标BC的值为1表示开机能力测试的致能状态(enabled);值为0表示开机能力测试的禁能状态(disabled)。然而,旗标BC可以利用不同的信息指示是否要进行所述开机能力测试。最后由上述更新模块13结束固件更新动作。
在步骤S316中,上述更新模块13判别上述新固件12的储存动作是否成功(步骤S316)。如否,上述更新模块13标示「备区」的固件更新失败(步骤S318)。如是,则执行步骤S310及S312。
步骤S310中切换「主区」及「备区」的实施方式显示于图4。首先,判别旗标BF的值(步骤S400)。当旗标BF的值为0时,将旗标BF的值变更为1(步骤S404)。当旗标BF的值为1时,将旗标BF的值变更为0(步骤S402)。
通过输入单元4的操作,通讯装置100重新开机。请参照图5及图6。通讯装置100开机时,处理器1执行加载模块10以进行以下各步骤(步骤S500)。加载模块10判别旗标BF以辨识开机用的固件。在步骤S502中,加载模块10以一个变量(以下称为BF_TEMP)记录旗标BF的值(步骤S502),并判别旗标BC以判断是否要进行开机能力测试。在本实施方式中,BF_TEMP目前记录的分割区为1,即区域22。在步骤S504中,加载模块10判别旗标BC是否在致能状态(BC等于1)(步骤S504)。如否,加载模块10直接执行步骤S508。如是,加载模块10切换「主区」及「备区」(步骤S506),并接着执行步骤S508。步骤S508中,加载模块10加载并执行所述变量BF TEMP所记录的区域中的固件以进行后续的开机程序(步骤S508)。在本实施方式中,此时被加载并执行的为固件12。判别执行的固件是否成功完成开机程序(步骤S510)。如是,则所述固件继续执行图6中开机成功的后续步骤(步骤S512)。如否,所述固件造成开机失败(步骤S514),可以通过输入单元4的操作,让通讯装置100重新开机。
若在步骤S514之后,通讯装置100重新开机,由于在步骤S506已切换「主区」及「备区」,所以处理器1会加载并执行原固件11,而非新固件12。
图5的步骤S510中,若所述新固件12能运行,使通讯装置100符合预定条件,则通讯装置100判定所述新固件能顺利运行。举例来说,上述预定条件包含多个特定的任务(task),处理器1执行固件12时,判别上述多个特定的任务是否已加载至通讯装置100的主存储器5,如是,则判定通讯装置100通过开机能力测试,成功完成开机。上述多个特定的任务为多个软件模块或程序,当执行时通讯装置100提供特定功能,例如命令行(command line)、超文件传送协议(HyperText Transfer Protocol,简称HTTP)、动态主机配置协议(Dynamic HostConfiguration Protocol,简称DHCP)、telnet、系统记录(System Log)、网络地址变换(Network Address Translation,NAT)、通用随插即用(Universal Plug and Play,UPnP)协议的处理功能。通讯装置100可以接收远程服务器的请求让所述远程服务器设置通讯装置100的设定值。上述任务提供的功能更可以包含与所述远程服务器的互动的功能,例如用户认证、数据传输及加解密等。
图6中,所述固件成功的完成开机程序后继续执行(步骤S600)并判别开机能力测试是否仍在致能状态。在步骤S602中,判别旗标BC的值是否等于0(步骤S602)。如是,则不需修改旗标BC(步骤S610)。如否,则变更旗标BC的值为0,将开机能力测试从致能状态切换为禁能状态(步骤S606),并再次执行「主区」及「备区」的切换(步骤S608)。
在本实施方式中,如果新固件12成功的完成开机程序,在步骤S608中,固件12所在的区域22会再次被切换为「主区」。若在步骤S608之后,通讯装置100重新开机,由于在步骤S608已切换「主区」及「备区」,所以处理器1会加载并执行新固件12,而非原固件11。若所述新固件12不能顺利运行,则不会执行步骤S608,因此通讯装置100维持所述旗标BF的值为0,固件11所在的区域21仍然为「主区」。
由上述说明可知,加载模块10在判定所述新固件12是否能顺利运行以前,利用所述旗标BF以指定开机用的固件为所述新固件以外的原固件11,或另一固件,并且响应所述装置的开机动作,加载并运行所述新固件12。若非挥发性内存2具有三个或三个以上的固件,加载模块10在判定所述新固件12是否能顺利运行以前,利用所述旗标BF以指定开机用的固件为所述新固件12以外的任一固件,并且响应所述装置的开机动作,加载并运行所述新固件12。
为了避免新固件12运行过程中,未完成图6中的步骤S608以前,输入单元4触发通讯装置100重新开机而产生错误,处理器1可以侦测输入单元4以执行图7的程序。在图7中,处理器1可以侦测通讯装置100是否被触发重新开机或关机(步骤S700)。如是,处理器1响应所述触发事件以执行下列步骤。处理器1判别开机能力测试是否仍在致能状态。在步骤S702中,判别旗标BC的值是否等于0(步骤S702)。如是,表示开机能力测试被禁能,则不需修改旗标BF(步骤S708)。如否,表示开机能力测试被致能,则维持旗标BC的值为1(步骤S704),并再次修改旗标BF以执行切换「主区」及「备区」(步骤S706)。最后,通讯装置100关机或重新开机(步骤S710)。这样,通讯装置100重新开机后,新固件12能够再被测试一次。
步骤S700中可能由输入单元4触发通讯装置100重新开机或关机,或由停电或其它的意外事故造成的。通讯装置100可以具有备用电源,使处理器1在测得通讯装置100将要被重新开机或关机之后,仍然可以执行图7中的步骤。通讯装置100的备用电源可以由电容或电池构成。
在某些实施方式中,图3至图7可以由加载模块10执行。在某些实施方式中,图3、4、6及7可以由固件12执行。
由上述说明可知,上述通讯装置在运行新固件以判定新固件是否能顺利运行以前,就利用旗标BF以指定开机用的固件为所述新固件以外的旧版固件。因此,即使新固件有问题造成所述通讯装置无法动作时,重新开机后的所述通讯装置会直接以旗标BF指定的旧版固件开机,无需另外的操作来改变通讯装置的开机设定。