嵌入式系統(tǒng)的固件升級方法以及固件升級裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,特別涉及一種嵌入式系統(tǒng)的固件升級方法以及一種嵌入式系統(tǒng)的固件升級裝置。
【背景技術(shù)】
[0002]嵌入式操作系統(tǒng)是一種用途廣泛的系統(tǒng)軟件,通常包括與硬件相關(guān)的底層驅(qū)動軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動接口、通信協(xié)議、圖形界面、標準化瀏覽器等。嵌入式操作系統(tǒng)負責嵌入式設(shè)備的全部軟、硬件資源的分配、任務(wù)調(diào)度,控制、協(xié)調(diào)并發(fā)活動,其必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達到系統(tǒng)所要求的功能。目前在嵌入式領(lǐng)域廣泛使用的操作系統(tǒng)有:嵌入式Linux、Windows Embedded (如:Wince6.0)、VxWorks等,以及應(yīng)用在智能手機和平板電腦的Android、1S等。
[0003]嵌入式操作系統(tǒng)的特點主要有:系統(tǒng)內(nèi)核小、專用性強、系統(tǒng)精簡、高實時性、多任務(wù)、需要開發(fā)工具和環(huán)境等。
[0004]操作系統(tǒng)(Operating system, OS)是嵌入式開發(fā)的核心部分,因此操作系統(tǒng)的升級更新工作也變得尤為重要?,F(xiàn)有的嵌入式操作系統(tǒng)升級的方法大部分是將新的系統(tǒng)文件存放在某一個固定的存儲區(qū)域,然后再將其拷貝存儲到系統(tǒng)文件固定的區(qū)域;在每次拷貝之前會先刪除原來的操作系統(tǒng)文件,在新的操作系統(tǒng)文件拷貝成功后,重新啟動嵌入式設(shè)備完成一次系統(tǒng)固件升級更新操作(也即操作系統(tǒng)升級)。另一種升級方式是將新的操作系統(tǒng)文件加密后上傳至服務(wù)器,然后通過軟件下載到嵌入式系統(tǒng)本地,再刪除原來的舊操作系統(tǒng)文件,最后拷貝至系統(tǒng)特定的區(qū)域,重啟系統(tǒng)完成OS升級更新。
[0005]然而,在現(xiàn)有的各種操作系統(tǒng)升級過程中,會存在以下問題:(I)由于NAND Flash產(chǎn)生壞塊導(dǎo)致的操作系統(tǒng)升級時系統(tǒng)死掉的問題;(2)由于驅(qū)動設(shè)計不合理引起的升級過程文件存儲路徑信息丟失而帶來的系統(tǒng)運行穩(wěn)定性不高的問題。
【發(fā)明內(nèi)容】
[0006]為克服現(xiàn)有技術(shù)中存在的一個或多個問題,本發(fā)明提供一種嵌入式系統(tǒng)的固件升級方法以及一種嵌入式系統(tǒng)的固件升級裝置。
[0007]具體地,本發(fā)明實施例提供的一種嵌入式系統(tǒng)的固件升級方法,其中所述嵌入式系統(tǒng)包括非易失性存儲器。所述固件升級方法包括步驟:(a)獲取并存儲升級鏡像文件至所述嵌入式系統(tǒng)的所述非易失性存儲器的一第一分區(qū)以及生成所述升級鏡像文件的存儲路徑信息;(b)對所述非易失性存儲器的一第二分區(qū)進行壞塊檢測并在所述第二分區(qū)中確定一好區(qū)塊;(C)根據(jù)所述存儲路徑信息從所述第一分區(qū)拷貝所述升級鏡像文件至所述第二分區(qū)的所述好區(qū)塊以及修改操作系統(tǒng)啟動的位置為從所述第二分區(qū)啟動;(d)在所述嵌入式系統(tǒng)從所述第二分區(qū)重新啟動操作系統(tǒng)后,對所述非易失性存儲器的一第三分區(qū)進行壞塊檢測并在所述第三分區(qū)中確定一好區(qū)塊;(e)拷貝所述升級鏡像文件至所述第三分區(qū)的所述好區(qū)塊并修改操作系統(tǒng)啟動的位置為從所述第三分區(qū)啟動;(f)使所述嵌入式系統(tǒng)從所述第三分區(qū)重新啟動操作系統(tǒng)。
[0008]在本發(fā)明的一個實施例中,上述步驟(a)包括:所述嵌入式系統(tǒng)的一應(yīng)用程序接收上位機發(fā)送的所述升級鏡像文件并存儲至所述第一分區(qū);所述應(yīng)用程序?qū)⑺錾夌R像文件的所述存儲路徑信息傳送給底層升級驅(qū)動程序;以及在傳送所述存儲路徑信息后,使所述應(yīng)用程序的線程處于阻塞狀態(tài)。
[0009]在本發(fā)明的一個實施例中,上述步驟(a)包括:所述嵌入式系統(tǒng)的一應(yīng)用程序接收上位機發(fā)送的所述升級鏡像文件并存儲至所述第一分區(qū);所述應(yīng)用程序?qū)⑺錾夌R像文件的所述存儲路徑信息傳送給底層升級驅(qū)動程序;以及所述底層升級驅(qū)動程序保存所述存儲路徑信息并創(chuàng)建底層升級線程、并在創(chuàng)建成功后返回一個線程創(chuàng)建成功標志以用于結(jié)束所述應(yīng)用程序的線程。
[0010]在本發(fā)明的一個實施例中,上述固件升級方法在步驟(C)之前還包括步驟:對所述嵌入式系統(tǒng)中的待保護應(yīng)用程序進行文件寫保護操作,以防止應(yīng)用程序文件數(shù)據(jù)被改與O
[0011]在本發(fā)明的一個實施例中,上述固件升級方法在步驟(C)之前還包括步驟:將所述嵌入式系統(tǒng)的待保護應(yīng)用程序文件備份在所述第一分區(qū)的一固定區(qū)域。
[0012]在本發(fā)明的一個實施例中,上述步驟(e)包括:從所述第一分區(qū)拷貝所述升級鏡像文件至所述第三分區(qū)的所述好區(qū)塊;或者從所述第二分區(qū)拷貝所述升級鏡像文件至所述第三分區(qū)的所述好區(qū)塊。
[0013]在本發(fā)明的一個實施例中,上述非易失性存儲器還劃分有一第四分區(qū);所述第四分區(qū)為引導(dǎo)區(qū)以作為操作系統(tǒng)啟動的boot鏡像的存放區(qū),所述第三分區(qū)為第一鏡像區(qū)以作為操作系統(tǒng)的內(nèi)核鏡像的主存放區(qū),所述第二分區(qū)為第二鏡像區(qū)以作為操作系統(tǒng)的內(nèi)核鏡像的備份區(qū),所述第一分區(qū)為用戶區(qū)。
[0014]在本發(fā)明的一個實施例中,上述非易失性存儲器為NAND型閃存。
[0015]此外,本發(fā)明實施例提供的一種嵌入式系統(tǒng)的固件升級裝置,其中所述嵌入式系統(tǒng)包括非易失性存儲器。所述固件升級裝置包括:數(shù)據(jù)接收模塊,用于獲取并存儲升級鏡像文件至所述嵌入式系統(tǒng)的所述非易失性存儲器的一第一分區(qū)以及生成所述升級鏡像文件的存儲路徑信息;壞塊處理模塊,用于對所述非易失性存儲器的一第二分區(qū)和一第三分區(qū)進行壞塊檢測并在所述第二分區(qū)和所述第三分區(qū)中分別確定一好區(qū)塊;升級驅(qū)動模塊,用于根據(jù)所述升級鏡像文件的所述存儲路徑信息從所述第一分區(qū)拷貝所述升級鏡像文件至所述第二分區(qū)的所述好區(qū)塊并修改操作系統(tǒng)啟動的位置為從所述第二分區(qū)啟動、使所述嵌入式系統(tǒng)從所述第二分區(qū)重新啟動操作系統(tǒng)后拷貝所述升級鏡像文件至所述第三分區(qū)的所述好區(qū)塊并修改操作系統(tǒng)啟動的位置為從所述第三分區(qū)啟動、以及使所述嵌入式系統(tǒng)從所述第三分區(qū)重新啟動操作系統(tǒng)。
[0016]在本發(fā)明的一個實施例中,上述非易失性存儲器為NAND型閃存,所述非易失性存儲器還劃分有一第四分區(qū);所述第四分區(qū)為引導(dǎo)區(qū)以作為操作系統(tǒng)啟動的boot鏡像的存放區(qū),所述第三分區(qū)為第一鏡像區(qū)以作為操作系統(tǒng)的內(nèi)核鏡像的主存放區(qū),所述第二分區(qū)為第二鏡像區(qū)以作為操作系統(tǒng)的內(nèi)核鏡像的備份區(qū),所述第一分區(qū)為用戶區(qū)。
[0017]因此,本發(fā)明上述實施例能夠達成以下一個或多個有益效果:(1)有效解決操作系統(tǒng)升級過程,非易失性存儲器例如NAND FLASH產(chǎn)生壞塊帶來的升級失敗,最終導(dǎo)致系統(tǒng)死掉的災(zāi)難性的問題;(2)有效解決升級過程內(nèi)核鏡像文件的路徑信息丟失的問題;(3)解決操作系統(tǒng)升級過程中穩(wěn)定性不高的問題;以及(4)解決升級過程中帶來的用戶文件損壞的問題。
[0018]通過以下參考附圖的詳細說明,本發(fā)明的其它方面和特征變得明顯。但是應(yīng)當知道,該附圖僅僅為解釋的目的設(shè)計,而不是作為本發(fā)明的范圍的限定,這是因為其應(yīng)當參考附加的權(quán)利要求。還應(yīng)當知道,除非另外指出,不必要依比例繪制附圖,它們僅僅力圖概念地說明此處描述的結(jié)構(gòu)和流程。
【附圖說明】
[0019]下面將結(jié)合附圖,對本發(fā)明的【具體實施方式】進行詳細的說明。
[0020]圖1為本發(fā)明實施例的一種嵌入式系統(tǒng)的固件升級方法的流程圖。
[0021]圖2為本發(fā)明實施例的一種非易失性存儲器的分區(qū)示意圖。
[0022]圖3為本發(fā)明實施例的一種嵌入式系統(tǒng)的固件升級裝置的功能模塊示意圖。
【具體實施方式】
[0023]為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明的【具體實施方式】做詳細的說明。
[0024]請參見圖1及圖2,其中圖1為本發(fā)明實施例的一種嵌入式系統(tǒng)的固件升級方法的流程圖,圖2為本發(fā)明實施例的一種非易失性存儲器的分區(qū)示意圖。具體地,在本實施例的嵌入式系統(tǒng)的固件升級方法中:
[0025]通過上位機(例如PC機)的應(yīng)用軟件將升級鏡像文件發(fā)送至嵌入式系統(tǒng),由嵌入式系統(tǒng)上的應(yīng)用程序負責接收來自上位機的OS (Operating System,操作系統(tǒng))升級鏡像文件并存儲在嵌入式系統(tǒng)的非易失性存儲器的用戶區(qū)(參見圖2)中,后續(xù)的升級操作過程就由嵌入式系統(tǒng)上的底層升級驅(qū)動程序完成。在底層升級驅(qū)動程序執(zhí)行固件升級(或稱OS升級)的過程中,有兩種優(yōu)選的方法可以保證升級中升級鏡像文件在非易失性存儲器的用戶區(qū)的存儲路徑信息不會傳輸錯誤:(a) —種是在嵌入式系統(tǒng)的上層應(yīng)用程序?qū)⒋鎯β窂叫畔魉徒o底層升級驅(qū)動程序以后,將該應(yīng)用程序的線程處于阻塞狀態(tài),這樣就可以保證底層升級驅(qū)動程序調(diào)用這個存儲路徑信息變量的過程中值不會由于應(yīng)用程序的線程退出而丟失,從而保證信息傳輸?shù)恼_性及準確性;(b)另外一種方式是在上層應(yīng)用程序?qū)㈢R像升級文件的存儲路徑信息傳輸給底層升級驅(qū)動程序時,底層升級驅(qū)動程序先將其保存,然后創(chuàng)建底層的升級線程,創(chuàng)建成功后,給上層應(yīng)用程序返回一個成功的標志,上層應(yīng)用程序接收到返回成功的標志,就退出當前線程,執(zhí)行下一步;而此時,底層升級驅(qū)動程序創(chuàng)建的線程也會放在操作系統(tǒng)的當前進程中輪詢執(zhí)行完成升級的過程,這種方法也同樣可以解決文件路徑信息丟失導(dǎo)致升級失敗的問題。
[0026]承上述,底層升級驅(qū)動程序接收到升級鏡像文件的存儲路徑信息后,先禁止操作系統(tǒng)開機自啟動軟件的運行,以防止升級過程中軟件自啟動帶來的升級失敗的問題。在禁止開機自啟動軟件以后,開始升級鏡像文件的拷貝工作,在拷貝數(shù)據(jù)之前對非易失性存儲器進行壞塊檢測處理,當檢測有壞塊時,將其標記為壞塊,并選擇下一個好的區(qū)塊以用于存儲升級鏡像文件數(shù)據(jù)。在第一次拷貝過程,是將升級鏡像文件數(shù)據(jù)從非易失性存儲器的用戶區(qū)域拷貝至鏡像2區(qū)(參見圖2),覆蓋原來鏡像2區(qū)中的數(shù)據(jù);拷貝完成以后,通過修改操作系統(tǒng)啟動的位置為從鏡像2區(qū)啟動。從鏡像2區(qū)重新啟動操作系統(tǒng)以后,恢復(fù)開機自啟動項,然后拷貝鏡像2區(qū)的升級鏡像文件數(shù)據(jù)到非易失性存儲器的鏡像I區(qū)(參見圖2),同樣在拷貝之前也要做壞塊處理,拷貝完成以后,將操作系統(tǒng)啟動的位置改為從鏡像I區(qū)啟動,然后退出整個升級的線程,嵌入式系統(tǒng)從鏡像I區(qū)重新啟動操作系統(tǒng)。這次重啟以后的操作