背景技术
请参阅图1,图1为已知嵌入式系统(embedded system)100的示意图。已知嵌入式系统100包含有一微处理器(microcontroller)104、多个存储装置102、106以及一下载接口108。如图1所示,微处理器104、存储装置102、106以及下载接口108均通过一总线(bus)101来互相传递数据。存储装置102用来存储一系统软件Sys_1与一开机映像文件(boot image)Boot_1,一般而言,存储装置102为一非易失性存储器(例如闪存)。微处理器104用来分别将系统软件Sys_1与开机映像文件Boot_1转换为一系统程序代码(system code)Sys_Code与一开机程序代码(boot code)Boot_Code,并依序执行开机程序代码Boot_Code与该系统程序代码Sys_Code以控制嵌入式系统100的开机操作。存储装置106用来暂存上述的系统程序代码Sys_Code与开机程序代码Boot_Code,一般而言,存储装置106为一易失性存储器(例如随机存取存储器)。下载接口108用来经由一数据传输媒介120耦接于一计算机主机(PC host)130,另外,计算机主机130中记录有另一系统软件Sys_2。对于已知嵌入式系统100而言,下载接口108可以是串行接口(Serial Port)、测试行动联合组织(Joint Test Action Group,JTAG)接口或者是网络接口,然而,使用者必须手动地操作计算机主机130,以通过数据传输媒介120,例如一连接线(cable)、一内部网络(LAN or WLAN)或一外部网络(Internet),来将系统软件Sys_2上传嵌入式系统100并更新原本的系统软件Sys_1。
请参阅图2,图2为已知更新嵌入式系统100的系统软件Sys_1的操作流程图。已知更新系统软件Sys_1的流程包含下列步骤:
步骤200:经由下载接口108与数据传输媒介120将嵌入式系统100耦接于计算机主机130;
步骤210:一使用者手动地操作计算机主机130,并通过下载接口108将计算机主机130存储器的系统软件Sys_2上传至嵌入式系统100中的存储装置106内;以及
步骤220:微处理器104读取存储装置106所纪录的系统软件Sys_2,并使用系统软件Sys_2来更新存储装置104内原本的系统软件Sys_1。
由上述说明可知,已知嵌入式系统100于更新其系统软件(例如操作系统)时,其必须依赖一外部的计算机主机130的手动操作,故当欲更新的嵌入式系统的数量极为庞大时,大量的软件更新时间便无法避免。此外,由于已知嵌入式系统于更新系统软件必须要使用者手动地操作计算机主机130,故使用者不但需要自备计算机主机130,起码还需具备操作计算机的知识与能力,因此,对于诉求应用于消费性电子产品的嵌入式系统来说,使用者操作上的不方便便是一个严重的缺点。
发明内容
本发明提供一种可自动更新嵌入式系统的系统软件的装置及方法,以解决上述的问题。
依据本发明的一实施例,其披露了一种可自动更新系统软件的嵌入式系统(embedded system)。该嵌入式系统包含有:一第一存储装置,用来存储一第一系统软件与一开机映像文件(boot image);一微处理器(microcontroller),耦接于该第一存储装置,用来分别将该系统软件与该开机映像文件转换为一系统程序代码与一开机程序代码(boot code),并用来依序执行该开机程序代码与该系统程序代码以控制该嵌入式系统的开机操作;以及一联机接口,耦接于该微处理器,用来经由一数据传输媒介耦接于一外部数据存储装置,该外部数据存储装置记录有一第二系统软件;其中该开机程序代码包含有一中间接口机制程序(update agent interfaceprogramming,UAIP),以及该微处理器于执行该系统程序代码前,其可执行该中间接口机制程序,以经由该联机接口自该外部数据存储装置读取该第二系统软件来更新该第一系统软件。
依据本发明的一实施例,其披露了一种可自动更新嵌入式系统的系统软件的方法,该嵌入式系统存储有一第一系统软件与一开机映像文件。该方法包含有:分别将该系统软件与该开机映像文件转换为一系统程序代码与一开机程序代码,其中该开机程序代码与该系统程序代码预定依序执行以控制该嵌入式系统的开机操作,以及该开机程序代码包含有一中间接口机制程序;经由一数据传输媒介将该嵌入式系统耦接于一外部数据存储装置,该外部数据存储装置记录有一第二系统软件;以及于执行该系统程序代码前,执行该中间接口机制程序以自该外部数据存储装置读取该第二系统软件来更新该第一系统软件。
本发明可自动更新嵌入式系统的系统软件的装置及方法,是经由一中间接口机制程序于加载开机程序代码时即进行判断并依据判断结果来决定是否自动更新嵌入式系统的系统软件,其可大幅减少嵌入式系统本身存储器的浪费,亦即,中间接口机制程序是置放于开机程序代码中被执行,而非置于应用软件中被执行,故不会于嵌入式系统完成开机后占用有限的存储器容量;此外,本发明可自动更新嵌入式系统的系统软件的装置及方法由于可达到自动更新系统软件的目的,所以大幅地降低了已知嵌入式系统软件更新时需耗费的人力与成本,并经由减少使用者的操作负担而提高嵌入式系统的使用便利性与市场竞争力。
具体实施方式
请参阅图3,图3为本发明第一实施例的嵌入式系统(embeddedsystem)300的示意图。嵌入式系统300包含有一微处理器304、多个存储装置302、306以及一联机接口308。如图3所示,微处理器304、多个存储装置302、306以及联机接口308经由一总线301来彼此传送数据。在本实施例中,嵌入式系统300使用闪存(flash memory)来实施存储装置302以及使用动态随机存取存储器(DRAM)来实施存储装置306,然而本发明并未限定存储装置的种类,存储装置302亦可以其它种类的非易失性(non-volatile)存储器来加以实施;同理,存储装置306亦可以其它种类的易失性(volatile)存储器来加以实施。
存储装置302用来存储一系统软件Sys_1与一开机映像文件(bootimage)Boot_1,而微处理器304用来分别将系统软件Sys_1与开机映像文件Boot_1转换为一系统程序代码(system code)Sys_Code与一开机程序代码(boot code)Boot_Code,并用来依序执行开机程序代码Boot_Code与系统程序代码Sys_Code以控制嵌入式系统300的开机操作,请注意,于本实施例中,开机程序代码Boot_Code中包含有一中间接口机制程序(updateagent interface programming)UAIP,一烧录程序Flashing_Code以及一网络连结程序Network_Code。如图3所示,存储装置306用来暂存系统程序代码Sys_Code与开机程序代码Boot_Code,以供微处理器304读取开机程序代码Boot_Code与系统程序代码Sys_Code来执行相关操作。联机接口308用来经由一数据传输媒介310耦接于一外部数据存储装置320,其中外部数据存储装置320记录有一系统软件Sys_2。请注意,本实施例中,联机接口308为一网络接口,用来经由一传输控制协议和互连网协议(TransmissionControl Protocol/Internet Protocol,TCP/IP)与外部存储装置320(例如一服务器)进行数据传输,此外,数据传输媒介310可以是一内部网络(local network or Intranet)或一外部网络(Internet),然而,上述仅为本发明的较佳实施例,所以,本发明实际上并未限定联机接口以及数据传输媒介的种类。
为清楚说明本发明软件更新流程的运作,请参阅图4,图4为图3所示的嵌入式系统300自动更新系统软件Sys_1的操作流程图。自动更新系统软件Sys_1的流程包含有下列步骤:
步骤400:开启嵌入式系统300的电源;
步骤402:微处理器304分别将系统软件Sys_1与开机映像文件Boot_1转换为系统程序代码Sys_Code与开机程序代码Boot_Code,其中开机程序代码Boot_Code与系统程序代码Sys_Code系依序被微处理器304所执行以控制嵌入式系统300的开机操作;
步骤404:于系统程序代码Sys_Code执行前,微处理器304执行中间接口机制程序UAIP;
步骤406:中间接口机制程序UAIP启动网络连结程序Network_Code来经由数据传输媒介310连结嵌入式系统300与外部数据存储装置320;
步骤408:中间接口机制程序UAIP读取系统软件Sys_2的软件版本的信息,并比较系统软件Sys_1、Sys_2的软件版本;
步骤410:系统软件Sys_2的软件版本比系统软件Sys_1的软件版本还新?若是,则执行步骤412;否则,执行步骤416;
步骤412:中间接口机制程序UAIP自外部数据存储装置320读取系统软件Sys_2,并启动烧录程序Flashing_Code以依据系统软件Sys_2来更新原本的系统软件Sys_1;
步骤414:开机程序代码Boot_Code驱使嵌入式系统300重新开机,接着,回到步骤402;以及
步骤416:微处理器304执行系统程序代码Sys_Code。
嵌入式系统300更新系统软件的操作详细说明如下。于开启嵌入式系统300的电源后,首先,存储装置302内的开机映像文件Boot_1会加载存储装置306中,接着,微处理器304便将开机映像文件Boot_1转换为开机程序代码Boot_Code,所以微处理器304即可执行开机程序代码Boot_Cod来控制嵌入式系统300的开机程序。开机程序代码Boot_Cod首先初始(initialize)嵌入式系统300中的硬件装置,接着,于执行到开机程序代码Boot_Code内的中间接口机制程序UAIP时,中间接口机制程序UAIP即启动开机程序代码Boot_Code中的网络连结程序Network_Code,以便经由联机接口308自外部数据存储装置320读取其内的系统软件Sys_2的信息,并进一步判断是否需使用系统软件Sys_2来更新嵌入式系统300内原本的系统软件Sys_1。在本实施例中,自外部数据存储装置320读取数据的方式为:加载网络连结程序Network_Code,其可以动态主机设定协议(Dynamic Host ConfigurationProtocol,DHCP)或固定网络地址(Static IP)方式取得嵌入式系统300所需的IP地址,而网络连结程序Network_Code接着便可启动简单文件传输协议(Trivial File Transfer Protocol,TFTP)或超文件传输协议(HyperText Transfer Protocol,HTTP)等已知网络协议来和外部数据存储装置320联机,在此,假设外部数据存储装置320为一TFTP服务器(TFTP Server),所以,中间接口机制程序UAIP便可经由网络连结程序Network_Code所支持的TFTP协议来读取位于TFTP服务器中文件库内的系统软件Sys_2的版本信息,并将其与嵌入式系统300内系统软件Sys_1的版本信息进行比较,而比较两系统软件Sys_1、Sys_2的版本的详细操作及细节则留待后述。
若系统软件Sys_2的软件版本比系统软件Sys_1的软件版本还新,则微处理器304所执行的中间接口机制程序UAIP便会判断需使用系统软件Sys_2来更新系统软件Sys_1。将系统软件Sys_1更新为系统软件Sys_2的流程为:首先,中间接口机制程序UAIP启动网络连结程序Network_Code以先下载系统软件Sys_2至存储装置306,然后接口机制程序UAIP再启动烧录程序Flashing_Code,因此,微处理器304便可执行烧录程序Flashing_Code以将系统软件Sys_2烧录至存储装置302,来达到更新系统软件Sys_1的目的,最后,开机程序代码Boot_Code便驱使嵌入式系统300重新开机。
以下说明系统软件Sys_1与系统软件Sys_2内部的数据内容。本实施例中,系统软件Sys_1包含有一核心映像文件(kernel image)与一文件系统映像文件(file system image),而系统软件Sys_2则有3种不同的选择,选择(一)为:只包含有核心映像文件;选择(二)为:只包含有文件系统映像文件;以及选择(三)为:同时包含有核心映像文件和文件系统映像文件。如果系统软件Sys_2只包含有核心映像文件,则系统软件Sys_1更新为系统软件Sys_2后,则只有原本的核心映像文件会被更新,至于原本的文件系统映像文件则原封不动;同理,如果系统软件Sys_2只包含有文件系统映像文件,则系统软件Sys_1更新为系统软件Sys_2后,只有原本的文件系统映像文件会被更新,而原本的核心映像文件则未被更新。由上可知,若是系统软件Sys_2同时包含有核心映像文件和文件系统映像文件,则当系统软件Sys_1更新为系统软件Sys_2后,原本的核心映像文件和文件系统映像文件皆会同时被更新。
当系统软件Sys_1已更新为系统软件Sys_2,并且嵌入式系统300重新开机之后,则上述操作会重复执行,亦即中间接口机制程序UAIP仍会判断是否需自动更新嵌入式系统300目前所使用的系统软件Sys_2(此时,系统软件Sys_2已取代原本的系统软件Sys_1)。若是此时外部数据存储装置320内有一新的系统软件Sys_3(未显示),且系统软件Sys_3的软件版本较嵌入式系统300内的系统软件Sys_2新时,则会再度更新嵌入式系统300内的系统软件Sys_2为系统软件Sys_3,否则,开机程序代码Boot_Code于完成其本身设定的开机操作后,其便会直接执行系统程序代码Sys_Code而不更新目前的系统软件Sys_2,而于系统程序代码Sys_Code成功加载后,嵌入式系统300即完成开机流程。接下来说明如何比较系统软件Sys_1、Sys_2的版本。
本实施例中,中间接口机制程序UAIP依据时间卷标(例如文件建立的时间)来比较系统软件Sys_1、Sys_2的软件版本,亦即,若系统软件Sys_2的时间卷标所纪录的时间晚于系统软件Sys_1的时间卷标所纪录的时间,则中间接口机制程序UAIP便会通过烧录程序Flashing_Code来将系统软件Sys_1更新为系统软件Sys_2。请注意,本发明并未限定使用时间卷标来比较软件版本,亦即,本发明亦可使用其它方式来比较系统软件Sys_1、Sys_2的软件版本,举例来说,中间接口机制程序亦可依据文件名来比较系统软件Sys_1、Sys_2的软件版本,均属本发明的范畴。另外,请注意,上述实施例中,中间接口机制程序UAIP,烧录程序Flashing_Code以及网络连结程序Network_Code分别为单独(standalone)的程序,然而,烧录程序Flashing_Code以及网络连结程序Network_Code亦可整合于中间接口机制程序UAIP,亦属本发明的范畴。
请参阅图5,图5为本发明第二实施例的嵌入式系统500的示意图。嵌入式系统500包含有一微处理器504、多个存储装置502、506、一联机接口508以及一人机接口装置(human interface device,HID)510。如图5所示,微处理器504、多个存储装置502、506、联机接口508以及一人机接口装置510经由一总线501来互相传递数据。同样地,联机接口508经由一数据传输媒介512而耦接于一外部数据存储装置520。请注意,由于图5所示的嵌入式系统500与图3所示的嵌入式系统300中的同名组件具有相同的功能与操作,因此相关说明于此不另重复赘述。由图3与图5可知,嵌入式系统500的架构类似于嵌入式系统300的架构,而主要的不同点为嵌入式系统500还包含有人机接口装置510,其耦接于微处理器504,用来允许嵌入式系统500的使用者可介入系统软件Sys_1的更新程序,换句话说,嵌入式系统500的使用者可经由人机接口装置510输入指令来控制微处理器504所执行的中间接口机制程序UAIP,以决定是否更新系统软件Sys_1。
举例来说,当开机程序代码Boot_Code执行时,其可经由人机接口装置510将一提示讯息显示于嵌入式系统500的屏幕(未显示)上,所以,嵌入式系统500的使用者经由人机接口装置510下达一指令来决定中间接口机制程序UAIP是否要被执行;此外,嵌入式系统500的使用者亦可经由人机接口装置510来设定中间接口机制程序UAIP的执行模式为“手动”,因此,当中间接口机制程序UAIP的执行模式为“手动”时,中间接口机制程序UAIP可经由人机接口装置510将文件版本的比较结果显示于嵌入式系统500的屏幕(未显示)上,最后,嵌入式系统500的使用者便可经由人机接口装置510手动地下达一指令来决定是否进行后续的系统软件更新。综上所述,嵌入式系统500可提供使用者于自动更新机制以外另一种互动更新机制的选择,亦即,具有人机接口装置510的嵌入式系统500可拥有较高的使用弹性。
本发明可自动更新嵌入式系统的系统软件的装置及方法,经由一中间接口机制程序于加载开机程序代码时即进行判断并依据判断结果来决定是否自动更新嵌入式系统的系统软件,其可大幅减少嵌入式系统本身存储器的浪费,亦即,中间接口机制程序置放于开机程序代码中被执行,而非置于应用软件中被执行,故不会于嵌入式系统完成开机后占用有限的存储器容量;此外,本发明可自动更新嵌入式系统的系统软件的装置及方法由于可并达到自动更新系统软件的目的,所以便大幅地降低已知嵌入式系统软件更新时需耗费的人力与成本,并经由减少使用者的操作负担而提高嵌入式系统的使用便利性与市场竞争力。
以上所述仅为本发明的较佳实施例,凡依本发明的权利要求所做的均等变化与修饰,皆应属本发明的涵盖范围。