本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,具體涉及嵌入式操作系統(tǒng)的啟動(dòng)方法及裝置。
背景技術(shù):
在嵌入式操作系統(tǒng)中,啟動(dòng)裝載(BootLoader)是在操作系統(tǒng)運(yùn)行之前運(yùn)行??梢猿跏蓟布O(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒(méi)有像基本的輸入輸出系統(tǒng)(Basic Input Output System,簡(jiǎn)稱(chēng):BIOS)那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。在嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開(kāi)始執(zhí)行,而在這個(gè)地址處通常就是系統(tǒng)的BootLoader程序。
一般在設(shè)備上電后,從地址0x00000000處開(kāi)始執(zhí)行,BootLoader將操作系統(tǒng)映像裝載到內(nèi)存中,并對(duì)操作系統(tǒng)映像進(jìn)行校驗(yàn),校驗(yàn)正確后跳轉(zhuǎn)到操作系統(tǒng)所在的內(nèi)存地址空間,啟動(dòng)操作系統(tǒng)。如果校驗(yàn)發(fā)生錯(cuò)誤,BootLoader不會(huì)啟動(dòng)操作系統(tǒng),并且通過(guò)串口輸出打印信息,提示用戶(hù)在啟動(dòng)項(xiàng)(boot)下升級(jí)軟件版本。
一般升級(jí)軟件版本的步驟是:通過(guò)網(wǎng)絡(luò)把版本下載到內(nèi)存中->擦除存儲(chǔ)區(qū)域(flash)中的軟件版本->把下載到內(nèi)存中的軟件版本寫(xiě)入flash。當(dāng)用戶(hù)正常使用時(shí),在web下升級(jí)系統(tǒng)軟件版本時(shí),可能會(huì)出現(xiàn)斷電的故障。如果在擦除flash軟件版本后還沒(méi)有寫(xiě)入新的版本的時(shí)機(jī),或者擦除flash軟件版本后新的軟件版本沒(méi)有寫(xiě)入完成時(shí)發(fā)生了斷電,那么會(huì)造成flash中的系統(tǒng)版本被破壞,導(dǎo)致下次啟動(dòng)版本 時(shí),不能正常進(jìn)入操作系統(tǒng),停留在BootLoader中,并提示用戶(hù)在boot下升級(jí)版本。
并且,用戶(hù)常見(jiàn)的組網(wǎng)情況如下:用戶(hù)終端通過(guò)網(wǎng)線(xiàn)連接并管理多臺(tái)設(shè)備。當(dāng)某一設(shè)備出現(xiàn)上面所說(shuō)的升級(jí)掉電的故障時(shí),該設(shè)備再次啟動(dòng)后會(huì)停留在boot中,無(wú)法進(jìn)入操作系統(tǒng),此時(shí)用戶(hù)通過(guò)網(wǎng)絡(luò)無(wú)法管理到該設(shè)備,只能通過(guò)在boot下升級(jí)該設(shè)備的版本。而boot下升級(jí)需要通過(guò)串口,而且該設(shè)備很有可能處在距離用戶(hù)終端非常遠(yuǎn)的地方,此時(shí)用戶(hù)需要攜帶手提電腦和串口線(xiàn)到該設(shè)備處,通過(guò)boot下升級(jí)版本修復(fù)該設(shè)備,非常不便。
另外,還有一些系統(tǒng)在flash中包含兩個(gè)軟件版本文件,如果版本1發(fā)生故障,boot會(huì)嘗試從版本2啟動(dòng),如果版本2是完好的,那么系統(tǒng)可以從版本2啟動(dòng)。這種情況下,flash中的版本1依然是損壞的,需要用戶(hù)手動(dòng)去升級(jí)版本1。而如果用戶(hù)沒(méi)有發(fā)現(xiàn)版本1的損壞,并在升級(jí)過(guò)程中造成版本2的損壞,依舊會(huì)出現(xiàn)上面的情況。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明提供了一種嵌入式操作系統(tǒng)的啟動(dòng)方法及裝置,使得嵌入式操作系統(tǒng)的存儲(chǔ)區(qū)域中的第一版本文件出現(xiàn)錯(cuò)誤時(shí),能夠采用其他版本文件對(duì)第一版本文件進(jìn)行修復(fù),并利用修復(fù)后的第一版本文件啟動(dòng)嵌入式操作系統(tǒng),保障了嵌入式操作系統(tǒng)安全啟動(dòng)。
第一方面,本發(fā)明提供一種嵌入式操作系統(tǒng)的啟動(dòng)方法,包括:
在嵌入式操作系統(tǒng)啟動(dòng)時(shí),檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值;
若所述環(huán)境變量的值非0,則確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤;
采用第三版本文件修復(fù)第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)第一版本文件;
在所述第一版本文件修復(fù)完成時(shí),清除所述環(huán)境變量的非0值,并重新啟動(dòng)所述嵌入式操作系統(tǒng);
其中,所述存儲(chǔ)區(qū)域存儲(chǔ)有,用于啟動(dòng)所述嵌入式操作系統(tǒng)的第一版本文件、用于修復(fù)所述第一版本文件的第二版本文件、以及用于修復(fù)所述第二版本文件且無(wú)擦寫(xiě)動(dòng)作的第三版本文件。
可選的,所述檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值之后,所述方法還包括:
若所述環(huán)境變量的值為0,則確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼無(wú)邏輯錯(cuò)誤;
根據(jù)所述第一版本文件的第一校驗(yàn)碼判斷所述第一版本文件的內(nèi)容是否錯(cuò)誤;
若所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤,則啟動(dòng)所述嵌入式操作系統(tǒng);
其中,所述第一校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第一版本文件的鏡像文件的內(nèi)容生成的校驗(yàn)碼。
可選的,所述根據(jù)所述第一版本文件的第一校驗(yàn)碼判斷所述第一版本文件的內(nèi)容是否錯(cuò)誤之后,所述方法還包括:
若所述第一版本文件的內(nèi)容存在錯(cuò)誤,則根據(jù)第二版本文件的第二校驗(yàn)碼判斷所述第二版本文件的內(nèi)容是否錯(cuò)誤;
若所述第二版本文件的內(nèi)容無(wú)錯(cuò)誤,則采用所述第二版本文件修復(fù)所述第一版本文件;
在所述第一版本文件修復(fù)完成時(shí),執(zhí)行所述清除所述環(huán)境變量的非0值的步驟;
其中,所述第二校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第二版本文件的鏡像文件的內(nèi)容生成的校驗(yàn)碼。
可選的,所述根據(jù)第二版本文件的第二校驗(yàn)碼判斷所述第二版本文件的內(nèi)容是否錯(cuò)誤之后,所述方法還包括:
若所述第二版本文件的內(nèi)容存在錯(cuò)誤,則采用第三版本文件修復(fù)所述第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)所述第一版本文件;
在所述第一版本文件修復(fù)完成時(shí),執(zhí)行所述清除所述環(huán)境變量的非0值的步驟。
可選的,所述根據(jù)所述第一版本文件的第一校驗(yàn)碼判斷所述第一版本文件的內(nèi)容是否錯(cuò)誤,包括:
對(duì)所述存儲(chǔ)區(qū)域中的第一版本文件的鏡像文件加載到內(nèi)存中;
根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第一校驗(yàn)碼;
將所述第一校驗(yàn)碼與第三校驗(yàn)碼進(jìn)行比較,所述第三校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第一版本文件的內(nèi)容生成的;
根據(jù)比較結(jié)果,判斷所述第一版本文件中的內(nèi)容是否存在錯(cuò)誤。
可選的,所述根據(jù)第二版本文件的第二校驗(yàn)碼判斷所述第二版本文件的內(nèi)容是否錯(cuò)誤,包括:
將所述存儲(chǔ)區(qū)域中的第二版本文件的鏡像文件加載到內(nèi)存中;
根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第二校驗(yàn)碼;
將所述第二校驗(yàn)碼與第四校驗(yàn)碼進(jìn)行比較,所述第四校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第二版本文件的內(nèi)容生成的;
根據(jù)比較結(jié)果,判斷所述第二版本文件中的內(nèi)容是否存在錯(cuò)誤。
可選的,所述第一版本文件還包括:位于所述第一版本文件頭部區(qū)域的第一版本號(hào)信息;
所述第二版本文件還包括:位于所述第二版本文件頭部區(qū)域的第二版本號(hào)信息;
相應(yīng)地,若所述第二版本文件被所述第三版本文件修復(fù),則在第二版本文件修復(fù)完成時(shí),將所述第二版本文件的第二版本號(hào)信息更新;
若所述第一版本文件被所述第二版本文件修復(fù),則在第一版本文 件修復(fù)完成時(shí),將所述第一版本文件的第一版本號(hào)信息更新。
可選的,所述方法還包括:
若所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤,則再預(yù)設(shè)時(shí)間段內(nèi)檢測(cè)所述第一版本號(hào)信息和所述第二版本號(hào)信息是否一致;
若所述第一版本號(hào)信息和所述第二版本號(hào)信息不一致,則選取所述第一版本號(hào)信息和所述第二版本號(hào)信息中數(shù)值大的版本號(hào)對(duì)應(yīng)的版本文件更新數(shù)值小的版本號(hào)對(duì)應(yīng)的版本文件。
可選的,所述方法還包括:
在所述嵌入式操作系統(tǒng)啟動(dòng)時(shí),啟動(dòng)定時(shí)器;
在所述定時(shí)器超出預(yù)設(shè)定時(shí)時(shí)間且所述嵌入式操作系統(tǒng)未成功啟動(dòng)時(shí),重新啟動(dòng)所述嵌入式操作系統(tǒng);
或者,
在所述定時(shí)器未超出預(yù)設(shè)定時(shí)時(shí)間且所述嵌入式操作系統(tǒng)成功啟動(dòng)時(shí),關(guān)閉定時(shí)器并清除所述環(huán)境變量的非0值。
第二方面,本發(fā)明還提供了一種嵌入式操作系統(tǒng)的啟動(dòng)裝置,包括:
檢測(cè)模塊,用于在嵌入式操作系統(tǒng)啟動(dòng)時(shí),檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值;
確定模塊,用于在檢測(cè)模塊檢測(cè)所述環(huán)境變量的值非0時(shí),確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤;
文件修復(fù)模塊,用于采用第三版本文件修復(fù)第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)第一版本文件;
啟動(dòng)模塊,用于在所述第一版本文件修復(fù)完成時(shí),清除所述環(huán)境變量的非0值,并重新啟動(dòng)所述嵌入式操作系統(tǒng);
其中,所述存儲(chǔ)區(qū)域存儲(chǔ)有,用于啟動(dòng)所述嵌入式操作系統(tǒng)的第一版本文件、用于修復(fù)所述第一版本文件的第二版本文件、以及用于修復(fù)所述第二版本文件且無(wú)擦寫(xiě)動(dòng)作的第三版本文件。
由上述技術(shù)方案可知,本發(fā)明提出了一種嵌入式操作系統(tǒng)的啟動(dòng)方法及裝置,通過(guò)預(yù)先在存儲(chǔ)區(qū)域中設(shè)置環(huán)境變量,并根據(jù)環(huán)境變量判斷嵌入式操作系統(tǒng)的啟動(dòng)代碼是否有邏輯錯(cuò)誤,在該啟動(dòng)代碼存在邏輯錯(cuò)誤時(shí),通過(guò)已備份的預(yù)先存儲(chǔ)在存儲(chǔ)區(qū)域中的其他版本的文件對(duì)第一版本文件進(jìn)行修復(fù),并利用修復(fù)后的第一版本文件啟動(dòng)嵌入式操作系統(tǒng),保障了嵌入式操作系統(tǒng)安全啟動(dòng)。
附圖說(shuō)明
圖1為本發(fā)明一實(shí)施例提供的嵌入式操作系統(tǒng)的啟動(dòng)方法的流程示意圖;
圖2為本發(fā)明另一實(shí)施例提供的嵌入式操作系統(tǒng)的啟動(dòng)方法的流程示意圖;
圖3為本發(fā)明一實(shí)施例提供的嵌入式操作系統(tǒng)的啟動(dòng)裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)發(fā)明的具體實(shí)施方式作進(jìn)一步描述。以下實(shí)施例僅用于更加清楚地說(shuō)明本發(fā)明的技術(shù)方案,而不能以此來(lái)限制本發(fā)明的保護(hù)范圍。
嵌入式操作系統(tǒng)從應(yīng)用角度可分為通用型嵌入式操作系統(tǒng)和專(zhuān)用型嵌入式操作系統(tǒng)。常見(jiàn)的通用型嵌入式操作系統(tǒng)有Linux、VxWorks、Windows CE.net等。常用的專(zhuān)用型嵌入式操作系統(tǒng)有Smart Phone、Pocket PC、Symbian等。按實(shí)時(shí)性可分為兩類(lèi):實(shí)時(shí)嵌入式操作系統(tǒng)主要面向控制、通信等領(lǐng)域。如WindRiver公司的VxWorks、ISI的pSOS、QNX系統(tǒng)軟件公司的QNX、ATI的Nucleus等。非實(shí)時(shí)嵌入式操作系統(tǒng)主要面向消費(fèi)類(lèi)電子產(chǎn)品。這類(lèi)產(chǎn)品包括PDA、移動(dòng)電話(huà)、機(jī)頂盒、電子書(shū)、WebPhone等。如微軟面向手機(jī)應(yīng)用的Smart Phone操作系統(tǒng)。
本發(fā)明實(shí)施例中主要提出了如何保證嵌入式操作系統(tǒng)的安全啟動(dòng),在嵌入式操作系統(tǒng)不能夠正常啟動(dòng)時(shí),一般啟動(dòng)裝載BootLoader程序也即啟動(dòng)加載文件出現(xiàn)了損壞,一般該文件的損壞主要包括兩種情況:一種情況是存儲(chǔ)區(qū)域flash中的內(nèi)容的物理?yè)p壞,還有一種情況是嵌入式操作系統(tǒng)的啟動(dòng)代碼存在邏輯錯(cuò)誤,本實(shí)施例就是針對(duì)上述兩種情況提出了一種嵌入式操作系統(tǒng)的啟動(dòng)方法。
圖1示出了本發(fā)明一實(shí)施例提供的嵌入式操作系統(tǒng)的啟動(dòng)方法的流程示意圖,如圖1所示,該方法包括以下步驟:
101、在嵌入式操作系統(tǒng)啟動(dòng)時(shí),檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值。
需要說(shuō)明的是,上述嵌入式操作系統(tǒng)所在的設(shè)備在上電后,啟動(dòng)裝載BootLoader程序會(huì)在嵌入式操作系統(tǒng)運(yùn)行之前,完成整個(gè)嵌入式操作系統(tǒng)的啟動(dòng)加載的任務(wù),本實(shí)施例中在嵌入式操作系統(tǒng)的存儲(chǔ)區(qū)域flash中預(yù)先設(shè)置有環(huán)境變量flag,通過(guò)該環(huán)境變量flag的標(biāo)記位值來(lái)判斷文件的啟動(dòng)代碼是否存在邏輯錯(cuò)誤。
102、若所述環(huán)境變量的值非0,則確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤。
可理解的是,嵌入式操作系統(tǒng)在每次成功啟動(dòng)時(shí),均會(huì)將環(huán)境變量的值清除為0,當(dāng)然嵌入式操作系統(tǒng)在未成功啟動(dòng)時(shí),也即環(huán)境變量的值為1,其中,本實(shí)施例中在環(huán)境變量的值為0時(shí),代表可以正常啟動(dòng),環(huán)境變量的值為1時(shí),代表啟動(dòng)過(guò)程出現(xiàn)了故障,也可以理解為嵌入式操作系統(tǒng)的啟動(dòng)代碼出現(xiàn)了邏輯錯(cuò)誤。
103、采用第三版本文件修復(fù)第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)第一版本文件。
其中,所述存儲(chǔ)區(qū)域存儲(chǔ)有,用于啟動(dòng)所述嵌入式操作系統(tǒng)的第一版本文件、用于修復(fù)所述第一版本文件的第二版本文件、以及用于修復(fù)所述第二版本文件且無(wú)擦寫(xiě)動(dòng)作的第三版本文件。
104、在所述第一版本文件修復(fù)完成時(shí),清除所述環(huán)境變量的非0值,并重新啟動(dòng)所述嵌入式操作系統(tǒng)。
上述方法通過(guò)預(yù)先在存儲(chǔ)區(qū)域中設(shè)置環(huán)境變量,并根據(jù)環(huán)境變量判斷嵌入式操作系統(tǒng)的啟動(dòng)代碼是否有邏輯錯(cuò)誤,在該啟動(dòng)代碼存在邏輯錯(cuò)誤時(shí),通過(guò)已備份的預(yù)先存儲(chǔ)在存儲(chǔ)區(qū)域中的其他版本的文件對(duì)第一版本文件進(jìn)行修復(fù),并利用修復(fù)后的第一版本文件啟動(dòng)嵌入式操作系統(tǒng),保障了嵌入式操作系統(tǒng)安全啟動(dòng)。
圖2示出了本發(fā)明另一實(shí)施例提供的嵌入式操作系統(tǒng)的啟動(dòng)方法的流程示意圖,如圖2所示,該方法包括以下步驟:
201、在嵌入式操作系統(tǒng)啟動(dòng)時(shí),啟動(dòng)定時(shí)器。
上述步驟201中的定時(shí)器可以理解為看門(mén)狗定時(shí)器。
202、檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值是否為0,若非0,則執(zhí)行步驟203,否則,執(zhí)行步驟208。
可理解的是,嵌入式操作系統(tǒng)在初次啟動(dòng)時(shí),一般環(huán)境變量的值為0,在嵌入式操作系統(tǒng)在后續(xù)有未成功啟動(dòng)時(shí),則環(huán)境變量的值為1,其中,本實(shí)施例中在環(huán)境變量的值為0時(shí),代表可以正常啟動(dòng),環(huán)境變量的值為非0(例如:為1)時(shí),代表啟動(dòng)過(guò)程出現(xiàn)了故障,也可以理解為嵌入式操作系統(tǒng)的啟動(dòng)代碼出現(xiàn)了邏輯錯(cuò)誤。
203、若步驟202中檢測(cè)的環(huán)境變量的值非0,則確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤。
204、采用第三版本文件修復(fù)第二版本文件。
205、采用修復(fù)完成后的第二版本文件修復(fù)第一版本文件。
在上述步驟204-205中,上述存儲(chǔ)區(qū)域中的第一版本文件、第二版本文件和第三版本文件可以理解為:第一版本文件為嵌入式操作系統(tǒng)啟動(dòng)所需的文件,第二版本文件為第一版本文件的備份文件,為了在第一版本文件損壞時(shí),對(duì)第一版本文件進(jìn)行修復(fù),第三版本文件為該嵌入式操作系統(tǒng)所在的設(shè)備在出廠(chǎng)時(shí)燒錄的基礎(chǔ)版本的文件,該第 三版本文件與第一版本文件和第二版本文件不同的是,在嵌入式操作系統(tǒng)啟動(dòng)的過(guò)程中是不會(huì)有擦寫(xiě)動(dòng)作的,保證了因?yàn)橐馔鈱?dǎo)致第一版本文件和第二版本文件都損壞時(shí),可以通過(guò)第三版本文件對(duì)第一版本文件和第二版本文件進(jìn)行修復(fù),通過(guò)第三版本文件修復(fù)第一版本文件和第二版本文件的過(guò)程為讀取第三版本文件的內(nèi)容到內(nèi)存中,并把內(nèi)存中的第三版本文件的內(nèi)容寫(xiě)入第一版本文件和第二版本文件在flash中的區(qū)域,整個(gè)過(guò)程不會(huì)擦寫(xiě)第三版本文件的區(qū)域,只會(huì)讀取第三版本文件的區(qū)域的內(nèi)容,這樣保證了第三版本文件的內(nèi)容永遠(yuǎn)不會(huì)被破壞,使得設(shè)備可正常啟動(dòng)操作系統(tǒng),用戶(hù)可通過(guò)網(wǎng)絡(luò)管理到設(shè)備,增強(qiáng)了整個(gè)系統(tǒng)的健壯性。
206、若所述第一版本文件修復(fù)完成,則執(zhí)行步驟207。
207、在上述步驟206中的第一版本文件修復(fù)完成后,清除所述環(huán)境變量的非0值,并重新啟動(dòng)所述嵌入式操作系統(tǒng)。
208、若前述步驟202中的所述環(huán)境變量的值為0,則確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼無(wú)邏輯錯(cuò)誤。
209、根據(jù)所述第一版本文件的第一校驗(yàn)碼判斷所述第一版本文件的內(nèi)容是否錯(cuò)誤,若第一版本文件的內(nèi)容不存在錯(cuò)誤,則執(zhí)行步驟210,否則,執(zhí)行步驟211。
上述步驟209中的第一校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第一版本文件的鏡像文件的內(nèi)容生成的校驗(yàn)碼。上述步驟209還包括如下步驟:
2091、對(duì)所述存儲(chǔ)區(qū)域中的第一版本文件的鏡像文件加載到內(nèi)存中;
2092、根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第一校驗(yàn)碼;
2093、將所述第一校驗(yàn)碼與第三校驗(yàn)碼進(jìn)行比較,所述第三校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第一版本文件的內(nèi)容生成的;
2094、根據(jù)步驟2093中的比較結(jié)果,判斷所述第一版本文件的內(nèi) 容是否存在錯(cuò)誤。
可理解的是,上述步驟2094中提到的在第一校驗(yàn)碼與第三校驗(yàn)碼一致時(shí),則說(shuō)明第一版本文件的內(nèi)容并未損壞,第一版本文件中的內(nèi)容不存在錯(cuò)誤;相反的,在第一校驗(yàn)碼與第三校驗(yàn)碼不一致時(shí),則說(shuō)明第一版本文件的內(nèi)容已損壞,例如:該損壞可能是在鏡像加載到內(nèi)存時(shí)損壞的,本實(shí)施例不對(duì)第一版本文件是如何損壞的進(jìn)行限定,僅用于舉例說(shuō)明。
本實(shí)施例中的第一校驗(yàn)碼和第三校驗(yàn)碼分別為通過(guò)加載到內(nèi)存中的第一版本文件生成的和通過(guò)存儲(chǔ)區(qū)域中的第一版本文件生成的,該生成過(guò)程根據(jù)加載到內(nèi)存中的第一版本文件的內(nèi)容和存儲(chǔ)區(qū)域中的第一版本的內(nèi)容通過(guò)循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check,簡(jiǎn)稱(chēng)crc)生成器或者crc校驗(yàn)碼生成的算法生成第一校驗(yàn)碼和第三校驗(yàn)碼,具體通過(guò)哪種算法或者哪種生成器本實(shí)施例不進(jìn)行詳細(xì)限定,例如可以通過(guò)現(xiàn)有的方法生成。
210、若所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤,則啟動(dòng)所述嵌入式操作系統(tǒng)。
211、若所述第一版本文件的內(nèi)容存在錯(cuò)誤,則根據(jù)第二版本文件的第二校驗(yàn)碼判斷所述第二版本文件的內(nèi)容是否錯(cuò)誤,如果所述第二版本文件的內(nèi)容無(wú)錯(cuò)誤,則執(zhí)行步驟205-207,否則,執(zhí)行步驟204-207。
需要說(shuō)明的是,在上述在第二版本文件的內(nèi)容無(wú)錯(cuò)誤,執(zhí)行步驟205-207,其中步驟205中就是該校驗(yàn)完成后的第二版本文件的內(nèi)容修復(fù)第一版本,也就是說(shuō),原來(lái)步驟205中是被第三版本文件修復(fù)后的第二版本文件,當(dāng)然,在上述步驟211中在第二版本文件的內(nèi)容不存在錯(cuò)誤時(shí),則不是被第三版本修復(fù)后的第二版本文件,而是檢驗(yàn)完成后版本文件的內(nèi)容無(wú)錯(cuò)誤的第二版本文件。
所述第二校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第二版本文件的鏡 像文件的內(nèi)容生成的校驗(yàn)碼。
上述步驟211還包括如下步驟:
2111、將所述存儲(chǔ)區(qū)域中的第二版本文件的鏡像文件加載到內(nèi)存中;
2112、根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第二校驗(yàn)碼;
2113、將所述第二校驗(yàn)碼與第四校驗(yàn)碼進(jìn)行比較,所述第四校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第二版本文件的內(nèi)容生成的;
2114、根據(jù)步驟2113的比較結(jié)果,判斷所述第二版本文件中的內(nèi)容是否存在錯(cuò)誤。
可理解的是,上述步驟211中判斷第二校驗(yàn)碼與第四校驗(yàn)碼一致時(shí),則說(shuō)明第二版本文件的內(nèi)容并未損壞,第二版本文件中的內(nèi)容不存在錯(cuò)誤;相反的,在第二校驗(yàn)碼與第四校驗(yàn)碼不一致時(shí),則說(shuō)明第二版本文件的內(nèi)容已損壞,例如:該損壞可能是在鏡像加載到內(nèi)存時(shí)損壞的,本實(shí)施例不對(duì)第二版本文件是如何損壞的進(jìn)行限定,僅用于舉例說(shuō)明。
本實(shí)施例中的第二校驗(yàn)碼和第四校驗(yàn)碼分別為通過(guò)加載到內(nèi)存中的第二版本文件生成的和通過(guò)存儲(chǔ)區(qū)域中的第二版本文件生成的,其中,在存儲(chǔ)區(qū)域中的第二版本文件為原始版本文件,或者是被第三版本文件修復(fù)后的第二版本文件,該生成過(guò)程根據(jù)加載到內(nèi)存中的第二版本文件的內(nèi)容和存儲(chǔ)區(qū)域中的第二版本的內(nèi)容通過(guò)crc校驗(yàn)碼生成器或者crc校驗(yàn)碼生成的算法生成第二校驗(yàn)碼和第四校驗(yàn)碼,具體通過(guò)哪種算法或者哪種生成器本實(shí)施例不進(jìn)行詳細(xì)限定,例如可以通過(guò)現(xiàn)有的方法生成。
在上述步驟201-211中,可以理解為該嵌入式操作系統(tǒng)內(nèi)還設(shè)置有硬件看門(mén)狗電路,看門(mén)狗定時(shí)器在嵌入式操作系統(tǒng)未成功啟動(dòng)時(shí),會(huì)處于開(kāi)啟狀態(tài),可理解的是,若上述定時(shí)器的定時(shí)時(shí)間超出了預(yù)設(shè)定時(shí)時(shí)間,則直接按照上述步驟201-211重新啟動(dòng)所述嵌入式操作系 統(tǒng);若上述定時(shí)器的定時(shí)時(shí)間未超出預(yù)設(shè)時(shí)間,則在上述步驟210啟動(dòng)所述嵌入式操作系統(tǒng)之后,上述方法還包括如下步驟:
212、判斷所述嵌入式操作系統(tǒng)是否啟動(dòng)成功,若是,則執(zhí)行步驟213,否則,執(zhí)行步驟201。
可理解的是若上述步驟212中判斷嵌入式操作系統(tǒng)為成功啟動(dòng),則需要關(guān)閉定時(shí)器,并重新開(kāi)啟定時(shí)器進(jìn)行重新計(jì)時(shí),防止在該嵌入式操作系統(tǒng)剛剛啟動(dòng)時(shí),定時(shí)器超出預(yù)設(shè)時(shí)間,然后再重新啟動(dòng)嵌入式操作系統(tǒng)。
213、關(guān)閉定時(shí)器并清除所述環(huán)境變量的非0值。
在上述步驟201-213中,為了使存儲(chǔ)區(qū)域中第一版本文件和第二版本文件的版本一致,上述步驟中的第二版本文件具有自動(dòng)更新的功能,其中,第一版本文件還包括:位于所述第一版本文件頭部區(qū)域的第一版本號(hào)信息;所述第二版本文件還包括:位于所述第二版本文件頭部區(qū)域的第二版本號(hào)信息。
上述的第一版本文件和第二版本文件可以理解為包括頭部區(qū)域和代碼區(qū)域;其中頭部區(qū)域存儲(chǔ)有版本號(hào)信息和校驗(yàn)碼等信息;代碼區(qū)域存儲(chǔ)有該版本文件對(duì)應(yīng)的內(nèi)容,也就是說(shuō),在版本文件進(jìn)行修復(fù)或者更新時(shí),其頭部區(qū)域中的校驗(yàn)碼是根據(jù)修復(fù)后的版本文件生成的,相應(yīng)的版本號(hào)信息中的版本號(hào)會(huì)執(zhí)行加1的操作;而代碼區(qū)域中存儲(chǔ)的版本文件的內(nèi)容會(huì)相應(yīng)的更新,原來(lái)的舊版本文件或者有錯(cuò)誤的版本文件會(huì)被擦寫(xiě)。需要說(shuō)明的是,第三版本的文件是不會(huì)被擦寫(xiě)的。
上述的第一版本號(hào)信息和第二版本號(hào)信息可以包括第一版本文件和第二版本文件的版本號(hào),具體可以包括以下更新:
若所述第二版本文件被所述第三版本文件修復(fù),則在第二版本文件修復(fù)完成時(shí),將所述第二版本文件的第二版本號(hào)信息更新;
若所述第一版本文件被所述第二版本文件修復(fù),則在第一版本文 件修復(fù)完成時(shí),將所述第一版本文件的第一版本號(hào)信息更新。
則在上述步驟210確定第一版本文件的內(nèi)容無(wú)錯(cuò)誤之后,上述方法還包括圖中未示出的以下步驟:
214、若根據(jù)步驟210確定所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤,則在預(yù)設(shè)時(shí)間段內(nèi)檢測(cè)所述第一版本號(hào)信息和所述第二版本號(hào)信息是否一致,若一致,則執(zhí)行步驟215;否則,則不對(duì)第一版本文件或第二版本文件進(jìn)行更新。
上述預(yù)設(shè)時(shí)間段可以理解為時(shí)間間隔,該時(shí)間間隔一般小于嵌入式操作系統(tǒng)啟動(dòng)初到啟動(dòng)成功的時(shí)間段,還可以理解為嵌入式操作系統(tǒng)啟動(dòng)初到啟動(dòng)成功的時(shí)間段檢測(cè)兩次或者三次,例如:可以為10s,20s等,本實(shí)施例不對(duì)檢測(cè)該第一版本文件和第二版本文件的版本號(hào)的具體時(shí)間間隔進(jìn)行限定。
215、若所述第一版本號(hào)信息和所述第二版本號(hào)信息不一致,則選取所述第一版本號(hào)信息和所述第二版本號(hào)信息中數(shù)值大的版本號(hào)對(duì)應(yīng)的版本文件更新數(shù)值小的版本號(hào)對(duì)應(yīng)的版本文件。
上述方法對(duì)第一版本文件與第二版本文件進(jìn)行了同步,例如避免了在第一版本文件較高且第一版本文件無(wú)法啟動(dòng)嵌入式操作系統(tǒng)時(shí),在用第二版本文件進(jìn)行修復(fù)時(shí),修復(fù)的為低版本的文件,造成在啟動(dòng)嵌入式操作系統(tǒng)時(shí)還需要對(duì)修復(fù)后的版本文件進(jìn)行升級(jí),導(dǎo)致嵌入式操作系統(tǒng)啟動(dòng)時(shí)間較緩慢的問(wèn)題。
當(dāng)然,上述步驟214-215也可以在步驟213在嵌入式系統(tǒng)啟動(dòng)成功,關(guān)閉定時(shí)器并清除所述環(huán)境變量的非0值之后執(zhí)行,本實(shí)施例不對(duì)上述第一版本文件和第二版本文件的更新時(shí)機(jī)進(jìn)行限定。
圖3示出了本發(fā)明實(shí)施例提供的一種嵌入式操作系統(tǒng)的啟動(dòng)裝置的結(jié)構(gòu)示意圖,如圖3所示,該啟動(dòng)裝置包括:
檢測(cè)模塊31,用于在嵌入式操作系統(tǒng)啟動(dòng)時(shí),檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值;
需要說(shuō)明的是,上述嵌入式操作系統(tǒng)所在的設(shè)備在上電后,啟動(dòng)裝載BootLoader程序會(huì)在嵌入式操作系統(tǒng)運(yùn)行之前,完成整個(gè)嵌入式操作系統(tǒng)的啟動(dòng)加載的任務(wù),本實(shí)施例中在嵌入式操作系統(tǒng)的存儲(chǔ)區(qū)域flash中預(yù)先設(shè)置有環(huán)境變量flag,通過(guò)該環(huán)境變量flag的標(biāo)記位值來(lái)判斷文件的啟動(dòng)代碼是否存在邏輯錯(cuò)誤。
一般的,如果上述嵌入式操作系統(tǒng)所在的設(shè)備在上電后,通過(guò)檢測(cè)發(fā)現(xiàn)flag為0,則可以確定文件的啟動(dòng)代碼存在邏輯錯(cuò)誤,無(wú)法進(jìn)行后續(xù)的啟動(dòng)工作。
本實(shí)施例中的環(huán)境變量的值可以理解為提前預(yù)設(shè)的,也就是說(shuō)設(shè)備在上電在嵌入式操作系統(tǒng)成功啟動(dòng)后或者啟動(dòng)嵌入式操作系統(tǒng)的第一版本文件被修復(fù)完成后,該環(huán)境變量的值為0,在第一版本文件有錯(cuò)誤導(dǎo)致嵌入式操作系統(tǒng)無(wú)法正常啟動(dòng)時(shí),該環(huán)境變量的值為非0(例如:設(shè)定標(biāo)記位的值為1)。
確定模塊32,用于在檢測(cè)模塊檢測(cè)所述環(huán)境變量的值非0時(shí),確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤;
文件修復(fù)模塊33,用于采用第三版本文件修復(fù)第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)第一版本文件;
其中,所述存儲(chǔ)區(qū)域存儲(chǔ)有,用于啟動(dòng)所述嵌入式操作系統(tǒng)的第一版本文件、用于修復(fù)所述第一版本文件的第二版本文件、以及用于修復(fù)所述第二版本文件且無(wú)擦寫(xiě)動(dòng)作的第三版本文件。
啟動(dòng)模塊34,用于在所述第一版本文件修復(fù)完成時(shí),清除所述環(huán)境變量的非0值,并重新啟動(dòng)所述嵌入式操作系統(tǒng)。
上述系統(tǒng)通過(guò)預(yù)先在存儲(chǔ)區(qū)域中設(shè)置環(huán)境變量,并通過(guò)檢測(cè)模塊檢測(cè)該環(huán)境變量的值,然后通過(guò)確定模塊根據(jù)環(huán)境變量的值確定嵌入式操作系統(tǒng)的啟動(dòng)代碼有邏輯錯(cuò)誤時(shí),通過(guò)文件修復(fù)模塊將已備份的預(yù)先存儲(chǔ)在存儲(chǔ)區(qū)域中的其他版本的文件對(duì)第一版本文件進(jìn)行修復(fù),并利用修復(fù)后的第一版本文件啟動(dòng)嵌入式操作系統(tǒng),保障了嵌入式操 作系統(tǒng)安全啟動(dòng)。
在一個(gè)優(yōu)選的實(shí)施方式中,所述確定模塊32,還用于在檢測(cè)模塊31檢測(cè)存儲(chǔ)區(qū)域中的環(huán)境變量的值為0時(shí),確定所述嵌入式操作系統(tǒng)的啟動(dòng)代碼無(wú)邏輯錯(cuò)誤;
相應(yīng)的,上述裝置還包括圖3中未示出的:第一判斷模塊;
第一判斷模塊,用于根據(jù)所述第一版本文件的第一校驗(yàn)碼判斷所述第一版本文件的內(nèi)容是否錯(cuò)誤;
所述啟動(dòng)模塊34,還用于在所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤時(shí),啟動(dòng)所述嵌入式操作系統(tǒng);
其中,所述第一校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第一版本文件的鏡像文件的內(nèi)容生成的校驗(yàn)碼。
相應(yīng)的,上述裝置還包括圖3中未示出的:第二判斷模塊;
第二判斷模塊,用于在第一判斷模塊判斷所述第一版本文件的內(nèi)容存在錯(cuò)誤時(shí),根據(jù)第二版本文件的第二校驗(yàn)碼判斷所述第二版本文件的內(nèi)容是否錯(cuò)誤;
文件修復(fù)模塊33,還用于在所述第二版本文件的內(nèi)容無(wú)錯(cuò)誤時(shí),采用所述第二版本文件修復(fù)所述第一版本文件;
啟動(dòng)模塊34,用于在所述第一版本文件修復(fù)完成時(shí),執(zhí)行所述清除所述環(huán)境變量的非0值的步驟;
其中,所述第二校驗(yàn)碼為根據(jù)加載到內(nèi)存中的所述第二版本文件的鏡像文件的內(nèi)容生成的校驗(yàn)碼。
文件修復(fù)模塊,還用于在所述第二版本文件的內(nèi)容存在錯(cuò)誤時(shí),采用第三版本文件修復(fù)所述第二版本文件,以及采用修復(fù)完成后的第二版本文件修復(fù)所述第一版本文件;
在所述第一版本文件修復(fù)完成時(shí),執(zhí)行所述清除所述環(huán)境變量的非0值的步驟。
第一判斷模塊,具體用于:
對(duì)所述存儲(chǔ)區(qū)域中的第一版本文件的內(nèi)容鏡像處理,并鏡像處理后鏡像文件加載到內(nèi)存中;
根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第一校驗(yàn)碼;
將所述第一校驗(yàn)碼與第三校驗(yàn)碼進(jìn)行比較,所述第三校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第一版本文件的內(nèi)容生成的;
根據(jù)比較結(jié)果,判斷所述第一版本文件的內(nèi)容是否存在錯(cuò)誤。
第二判斷模塊,具體用于:
將所述存儲(chǔ)區(qū)域中的第二版本文件的內(nèi)容鏡像處理,并鏡像處理后鏡像文件加載到內(nèi)存中;
根據(jù)所述內(nèi)存中的鏡像文件的內(nèi)容生成所述第二校驗(yàn)碼;
將所述第二校驗(yàn)碼與第四校驗(yàn)碼進(jìn)行比較,所述第四校驗(yàn)碼為預(yù)先根據(jù)所述存儲(chǔ)區(qū)域的第二版本文件的內(nèi)容生成的;
根據(jù)比較結(jié)果,判斷所述第二版本文件中的內(nèi)容是否存在錯(cuò)誤。
在一個(gè)優(yōu)選的實(shí)施方式中,所述第一版本文件還包括:位于所述第一版本文件頭部區(qū)域的第一版本號(hào)信息;
所述第二版本文件還包括:位于所述第二版本文件頭部區(qū)域的第二版本號(hào)信息;
相應(yīng)地,文件修復(fù)模塊33,還用于在所述第二版本文件被所述第三版本文件修復(fù)時(shí),在第二版本文件修復(fù)完成時(shí),將所述第二版本文件的第二版本號(hào)信息更新;
在所述第一版本文件被所述第二版本文件修復(fù)時(shí),在第一版本文件修復(fù)完成時(shí),將所述第一版本文件的第一版本號(hào)信息更新。
上述裝置還包括圖3中未示出的:更新模塊;
檢測(cè)模塊,還用于所述第一版本文件的內(nèi)容無(wú)錯(cuò)誤,則在預(yù)設(shè)時(shí)間段內(nèi)檢測(cè)所述第一版本號(hào)信息和所述第二版本號(hào)信息是否一致;
更新模塊,用于在所述第一版本號(hào)信息和所述第二版本號(hào)信息不一致時(shí),選取所述第一版本號(hào)信息和所述第二版本號(hào)信息中數(shù)值大的 版本號(hào)對(duì)應(yīng)的版本文件更新數(shù)值小的版本號(hào)對(duì)應(yīng)的版本文件。
上述裝置還包括圖3中未示出的:定時(shí)模塊;
定時(shí)模塊,用于在所述嵌入式操作系統(tǒng)啟動(dòng)時(shí),啟動(dòng)定時(shí)器;
啟動(dòng)模塊,用于在所述定時(shí)器超出預(yù)設(shè)定時(shí)時(shí)間且所述嵌入式操作系統(tǒng)未成功啟動(dòng)時(shí),重新啟動(dòng)所述嵌入式操作系統(tǒng);
或者,
啟動(dòng)模塊,還用于在所述定時(shí)器未超出預(yù)設(shè)定時(shí)時(shí)間且所述嵌入式操作系統(tǒng)成功啟動(dòng)時(shí),關(guān)閉定時(shí)器并清除所述環(huán)境變量的非0值。
可理解的是,上述啟動(dòng)裝置與上述嵌入式操作系統(tǒng)的啟動(dòng)方法是一一對(duì)應(yīng)的,本實(shí)施例不再對(duì)上述啟動(dòng)裝置進(jìn)行詳細(xì)說(shuō)明。
以上所述各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。