一種嵌入式設備的固件升級方法及嵌入式系統的制作方法
【技術領域】
[0001]本發明涉及嵌入式設備技術領域,特別涉及一種嵌入式設備的固件升級方法及嵌入式系統。
【背景技術】
[0002]嵌入式設備的構成,是以嵌入式處理芯片為主,配合相關的支撐硬件和應用程序,共同組成一個軟硬件于一體的可獨立工作的設備。相比于手機或者平板電腦等高智能設備,所謂的嵌入式設備往往是更為簡單的小型電子設備,不具備高智能操作系統,但依然可以通過內置的應用程序來實現諸多實用功能。例如,心率帶/脈搏表或類似的小型可穿戴電子設備,均屬于嵌入式設備。
[0003]嵌入式設備中應用程序的升級,需要利用系統中的啟動器(bootloader)觸發下載的流程,使系統開始下載應用程序的固件升級包。另外在一些情況下,啟動器本身也需要下載更新,但啟動器一般保存在嵌入式芯片的閃存中,屬于系統的一部分,一旦在閃存中擦除系統即會崩潰;所以常規的系統難以完成自身的更新替換。
[0004]現有的一些嵌入式設備,選擇將啟動器保存在RAM當中,得以避免升級啟動器時擦除閃存中的系統部分,導致系統崩潰的情況;使得系統能夠完成啟動器的更新替換。但是這種方案的缺陷在于,一旦啟動器升級過程中設備意外掉電,便會導致啟動器丟失,系統重新上電后失去啟動器,同樣會造成崩潰。也就是啟動器的升級存在巨大的風險。
[0005]另一些現有的嵌入式設備采用設置雙啟動器的方式。這樣即使升級過程中一個啟動器丟失,另一個備用的啟動器依然可以維持系統運行,安全性比較高。不過這種方案的缺陷是,雙啟動器導致系統過于復雜,而且啟動器的升級頻率極低,設置雙啟動器使得系統不得不具有不必要的冗余。
[0006]可見現有技術的缺陷是,無法在不增加系統復雜程度的前提下,穩定的實現啟動器升級,并且不受到掉電的影響。現有技術中不存在嵌入式設備的系統能夠簡捷且安全的實現啟動器的升級。
【發明內容】
[0007]有鑒于此,本發明的目的在于提供一種嵌入式設備的固件升級方法及嵌入式系統,通過重新構造嵌入式系統的整體結構,從而簡捷且安全的實現啟動器的升級。
[0008]為實現上述目的,有如下技術方案:
[0009]一種嵌入式設備的固件升級方法,所述方法包括:
[0010]自嵌入式芯片閃存的上電起始位起劃分出觸發區;將啟動器分解為觸發器和下載器,將所述觸發器保存到所述觸發區中;
[0011]從嵌入式芯片閃存中劃分出彼此獨立擦寫的下載區和應用區;將所述下載器保存至下載區;將應用程序保存至所述應用區,并在所述應用區中保存引導器;
[0012]當出現針對應用區的下載指令,則觸發器觸發所述下載區中的下載器更新應用固件;當出現針對下載區的下載指令,則所述觸發器觸發所述應用區中的引導器更新下載器固件。
[0013]所述從嵌入式芯片閃存中劃分出彼此獨立擦寫的下載區和應用區具體為:
[0014]從嵌入式芯片閃存中劃分出第一區作為下載區,并將所述下載區的地址范圍發送至觸發器;
[0015]從嵌入式芯片閃存中劃分出第二區作為應用區,并將所述應用區的地址范圍發送至觸發器。
[0016]所述觸發器觸發所述下載區中的下載器更新應用固件具體為:
[0017]觸發器從所述下載區的地址范圍中調用所述下載器,并令所述下載器根據應用區的下載指令,進行應用固件的下載。
[0018]所述觸發器觸發所述應用區中的引導器更新下載器固件具體為:
[0019]觸發器從所述應用區的地址范圍中調用所述引導器,并令所述引導器根據下載區的下載指令,進行下載器固件的下載。
[0020]所述方法還包括:
[0021]從嵌入式芯片閃存中劃分出第三區作為驅動區,并將所述驅動區的地址范圍發送至觸發器;將驅動程序保存至所述驅動區;
[0022]當出現針對驅動區的下載指令,觸發器從所述下載區的地址范圍中調用所述下載器,并令所述下載器根據驅動區的下載指令,進行驅動固件的下載。
[0023]一種嵌入式系統,所述系統具體為:
[0024]在嵌入式芯片閃存的上電起始位起劃分出觸發區;將啟動器分解為觸發器和下載器,將所述觸發器保存到所述觸發區中;從嵌入式芯片閃存中劃分出彼此獨立擦寫的下載區和應用區;將所述下載器保存至下載區;將應用程序保存至所述應用區,并在所述應用區中保存引導器;
[0025]所述觸發器用于,在出現針對應用區的下載指令時,觸發所述下載區中的下載器更新應用固件;或在出現針對下載區的下載指令時,觸發所述應用區中的引導器更新下載器固件。
[0026]所述系統還包括:
[0027]分區模塊,用于在嵌入式芯片閃存的上電起始位起劃分出觸發區;從嵌入式芯片閃存中劃分出第一區作為下載區,并將所述下載區的地址范圍發送至觸發器;從嵌入式芯片閃存中劃分出第二區作為應用區,并將所述應用區的地址范圍發送至觸發器。
[0028]所述觸發器觸發所述下載區中的下載器更新應用固件具體為:
[0029]觸發器從所述下載區的地址范圍中調用所述下載器,并令所述下載器根據應用區的下載指令,進行應用固件的下載。
[0030]所述觸發器觸發所述應用區中的引導器更新下載器固件具體為:
[0031]觸發器從所述應用區的地址范圍中調用所述引導器,并令所述引導器根據下載區的下載指令,進行下載器固件的下載。
[0032]所述分區模塊還用于:
[0033]從嵌入式芯片閃存中劃分出第三區作為驅動區,并將所述驅動區的地址范圍發送至觸發器;將驅動程序保存至所述驅動區;
[0034]則所述觸發器還用于,在出現針對驅動區的下載指令時,從所述下載區的地址范圍中調用所述下載器,并令所述下載器根據驅動區的下載指令,進行驅動固件的下載。
[0035]通過以上技術方案可知,本發明存在的有益效果是:通過重新構建系統,將觸發器保存在上電起始位的觸發區中,避免了系統崩潰的發生,并且不增加系統的復雜程度;獨立擦寫的下載區和應用區能夠實現相互引導下載更新程序,實現穩定的應用程序更新和下載器更新。
【附圖說明】
[0036]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0037]圖1為本發明實施例所述系統結構示意圖;
[0038]圖2為本發明實施例所述方法流程圖。
【具體實施方式】
[0039]為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0040]為實現嵌入式設備中安全穩定的啟動器升級,防止升級過程中意外掉電導致系統崩潰,并且不額外的增加系統的復雜程度;本實施例中對于嵌入式系統的結構進行了重新的設計和構造。參見圖1所示,為本發明實施例所述嵌入式系統的具體實施例。本實施例中所述系統具體結構如以下描述:
[0041]首先,本實施例中將所述啟動器(bootloader)拆分為觸發器(boot)和下載器(loader)兩部分。所述啟動器原本用于觸發下載的流程,使系統開始下載應用程序的固件升級包;而拆分后,所述觸發器將用于觸發下載流程開始,下載器則用于引導下載的過程。
[0042]同時本實施例中將利用劃分模塊自嵌入式芯片閃存的上電起始位起劃分出觸發區,將所述觸發器保存到所述觸發區中。所述上電起始位,就是閃存重新上電后首先開始運行的存儲位置。本實施例中從上電起始位開始,取連續的若干存儲空間作為觸發區,所述觸發區的大小應不小于觸發器的大小;并且所述觸發區獨立擦寫,這保證了觸發區中保存的觸發器不會在閃存其他內容更新時被擦除。
[0043]因為所述觸發器是為系統運行的起點,系統運行以及固件的升級流程均由觸發器觸發開啟,所以一旦閃存中觸發器被擦除,系統即會崩潰。這也是現有技術當中,各種導致系統崩潰情況的主要原因所在。而且一般的啟動器升級過程當中,主要是對啟動器中的下載器進行升級,觸發器本身往往不發生變化。
[0044]所以本實施例中,將啟動器拆分,并且將所述觸發器獨立的保存在觸發區中,所產生的影響有兩個:一是將觸發器保存在一個獨立的觸發區中,保證了觸發器不被誤刪,使觸發器的安全性得到保障,不受其他任何閃存擦寫操作的影響;二是觸發區位于上電起始位,所以一旦系統上電,觸發器就能夠被自動執行,無需通過其他程序來查詢觸發器的位置,使得觸發器的執行不受到其他程序的限制。
[0045]這樣一來,無論閃存中執行任何擦寫操作,或者發生意外掉電導致任何程序的丟失,觸發器始終安全的保存在觸發區中,一旦重新上電就能夠被有效執行。本實施例中通過上述的設計規避了系統崩潰的風險。
[0046]然后,本實施例中還將利用劃分模塊從嵌入式芯片閃存中劃分出彼此獨立擦寫的下載區和應用區。所述啟動器的另一部分一一下載器即保存在所述下載區中;而系統中的應用程序均被早存在應用區中。所述下載區和應用區也是彼此獨立擦寫的。
[0047]由于下載區和應用區存在彼此獨立擦寫的特點,所以利用下載區中的下載器可以引導下載應用區中的應用程序,完成應用區中內容的擦寫與程序更新;這一點基本等同于現有技術中應用程序固件升