嵌入式系統(tǒng)啟動(dòng)異常的處理方法及裝置制造方法
【專利摘要】一種嵌入式系統(tǒng)啟動(dòng)異常的處理方法及裝置,通過(guò)在存儲(chǔ)設(shè)備上設(shè)置多個(gè)內(nèi)核和文件系統(tǒng),在嵌入式系統(tǒng)不能正常啟動(dòng)時(shí),根據(jù)啟動(dòng)標(biāo)志判斷出現(xiàn)異常的是當(dāng)前內(nèi)核所在的存儲(chǔ)區(qū)域,還是當(dāng)前文件系統(tǒng)所在的存儲(chǔ)區(qū)域,然后即自動(dòng)啟動(dòng)新的內(nèi)核或文件系統(tǒng),保證了嵌入式系統(tǒng)正常啟動(dòng),而且本發(fā)明不影響嵌入式系統(tǒng)的性能,與其它異常處理方法不存在沖突,能夠解決存儲(chǔ)設(shè)備出現(xiàn)多個(gè)位錯(cuò)誤和內(nèi)核壞塊等異常時(shí),系統(tǒng)不能啟動(dòng)的問(wèn)題,具有廣泛的實(shí)用性。
【專利說(shuō)明】嵌入式系統(tǒng)啟動(dòng)異常的處理方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及嵌入式系統(tǒng)【技術(shù)領(lǐng)域】,特別是涉及一種嵌入式系統(tǒng)啟動(dòng)異常的處理方 法及裝置。
【背景技術(shù)】
[0002] 嵌入式系統(tǒng),例如linux操作系統(tǒng),一般包括bootloader (引導(dǎo)程序)、kernel (內(nèi) 核)和file system(文件系統(tǒng)),采用nand flash等作為其存儲(chǔ)設(shè)備。
[0003] 存儲(chǔ)設(shè)備一般有擦寫次數(shù)限制和位反轉(zhuǎn)、壞塊的可能,一旦存儲(chǔ)設(shè)備出現(xiàn)問(wèn)題時(shí), 嵌入式系統(tǒng)將不能正常啟動(dòng)。目前一般采用以下方法解決系統(tǒng)不能正常啟動(dòng)的問(wèn)題:
[0004] 1、采用硬件ECC (Error Correcting Code,錯(cuò)誤檢查和糾正)或者軟件ECC來(lái)進(jìn)行 檢測(cè)和糾正位反轉(zhuǎn);
[0005] 2、采用壞塊管理機(jī)制,對(duì)出現(xiàn)壞塊的數(shù)據(jù)進(jìn)行搬移。
[0006] 但是上述ECC方法糾正的位數(shù)有限,一般只能糾正存儲(chǔ)設(shè)備一個(gè)塊中的一位或者 二位,若在一個(gè)塊中出現(xiàn)多個(gè)位錯(cuò)誤,現(xiàn)有的ECC方法將無(wú)法解決;搬移壞塊的數(shù)據(jù)的方法 要求文件系統(tǒng)有復(fù)雜的算法,并且在內(nèi)核出現(xiàn)壞塊時(shí),現(xiàn)有的壞塊管理機(jī)制無(wú)法解決系統(tǒng) 不能啟動(dòng)的問(wèn)題。
【發(fā)明內(nèi)容】
[0007] 基于此,有必要針對(duì)上述問(wèn)題,提供一種嵌入式系統(tǒng)啟動(dòng)異常的處理方法及裝置, 能夠在存儲(chǔ)設(shè)備出現(xiàn)多個(gè)位錯(cuò)誤和內(nèi)核出現(xiàn)壞塊等異常情況時(shí),保證嵌入式系統(tǒng)的正常啟 動(dòng)。
[0008] -種嵌入式系統(tǒng)啟動(dòng)異常的處理方法,包括步驟:
[0009] 運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng)標(biāo)志確定是否增加異常標(biāo)志 的次數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位正常 的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo)志表示當(dāng)前內(nèi)核和文件系統(tǒng) 是否正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常;
[0010] 從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所述內(nèi)核并將所述文件系 統(tǒng)的引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志;
[0011] 運(yùn)行內(nèi)核,若內(nèi)核運(yùn)行出現(xiàn)異常,返回運(yùn)行引導(dǎo)程序的步驟,否則在內(nèi)核運(yùn)行完成 時(shí),設(shè)置所述啟動(dòng)標(biāo)志,并通過(guò)引導(dǎo)程序傳的環(huán)境變量加載文件系統(tǒng);
[0012] 運(yùn)行文件系統(tǒng),若文件系統(tǒng)運(yùn)行出現(xiàn)異常,返回運(yùn)行引導(dǎo)程序的步驟。
[0013] 一種嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,包括:
[0014] 引導(dǎo)程序運(yùn)行模塊,用于運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng)標(biāo)志 確定是否增加異常標(biāo)志的次數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù) 啟動(dòng)標(biāo)志將標(biāo)志位正常的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo)志表 示當(dāng)前內(nèi)核和文件系統(tǒng)是否正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常;
[0015] 內(nèi)核加載模塊,用于從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所述 內(nèi)核并將所述文件系統(tǒng)的引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志;
[0016] 內(nèi)核運(yùn)行模塊,用于運(yùn)行內(nèi)核,在內(nèi)核運(yùn)行出現(xiàn)異常時(shí)復(fù)位,在內(nèi)核運(yùn)行完成時(shí)設(shè) 置所述啟動(dòng)標(biāo)志;
[0017] 文件系統(tǒng)加載模塊,用于通過(guò)引導(dǎo)程序傳的環(huán)境變量加載文件系統(tǒng);
[0018] 文件系統(tǒng)運(yùn)行模塊,用于運(yùn)行文件系統(tǒng),在文件系統(tǒng)運(yùn)行出現(xiàn)異常時(shí)復(fù)位。
[0019] 本發(fā)明嵌入式系統(tǒng)啟動(dòng)異常的處理方法和裝置,與現(xiàn)有技術(shù)相互比較時(shí),具備以 下優(yōu)點(diǎn):
[0020] 1、通過(guò)在存儲(chǔ)設(shè)備上設(shè)置多個(gè)內(nèi)核和文件系統(tǒng),在嵌入式系統(tǒng)不能正常啟動(dòng)時(shí), 根據(jù)啟動(dòng)標(biāo)志判斷出現(xiàn)異常的是當(dāng)前內(nèi)核所在的存儲(chǔ)區(qū)域,還是當(dāng)前文件系統(tǒng)所在的存儲(chǔ) 區(qū)域,然后即自動(dòng)啟動(dòng)新的內(nèi)核或文件系統(tǒng),保證嵌入式系統(tǒng)正常啟動(dòng);
[0021] 2、不影響嵌入式系統(tǒng)的性能,與其它異常處理方法不存在沖突,能夠解決存儲(chǔ)設(shè) 備出現(xiàn)多個(gè)位錯(cuò)誤和內(nèi)核壞塊等異常時(shí),系統(tǒng)不能啟動(dòng)的問(wèn)題,具有廣泛的實(shí)用性,能夠較 大程度上保證系統(tǒng)的健壯性。
【專利附圖】
【附圖說(shuō)明】
[0022] 圖1為本發(fā)明方法實(shí)施例的流程示意圖;
[0023] 圖2為本發(fā)明NAND FLASH實(shí)施例的區(qū)域劃分示意圖;
[0024] 圖3為本發(fā)明裝置實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0025] 下面結(jié)合附圖對(duì)本發(fā)明嵌入式系統(tǒng)啟動(dòng)異常的處理方法的【具體實(shí)施方式】做詳細(xì) 描述。
[0026] 如圖1所示,一種嵌入式系統(tǒng)啟動(dòng)異常的處理方法,包括步驟:
[0027] S110、運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng)標(biāo)志確定是否增加異常 標(biāo)志的次數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位 正常的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo)志表示當(dāng)前內(nèi)核和文件 系統(tǒng)是否正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常;
[0028] 存儲(chǔ)設(shè)備設(shè)置有引導(dǎo)程序、多個(gè)內(nèi)核、多個(gè)文件系統(tǒng)、參數(shù)區(qū),各個(gè)內(nèi)核相同,其所 在的存儲(chǔ)空間大小可以不同,各個(gè)文件系統(tǒng)相同,其所在的存儲(chǔ)空間大小可以不同;存儲(chǔ)設(shè) 備還可以設(shè)置有一個(gè)內(nèi)核和多個(gè)文件系統(tǒng),或者多個(gè)內(nèi)核和一個(gè)文件系統(tǒng),不過(guò)一般僅能 解決文件系統(tǒng)所在的存儲(chǔ)空間出現(xiàn)損壞,或者內(nèi)核所在的存儲(chǔ)空間出現(xiàn)損壞的問(wèn)題;
[0029] 參數(shù)區(qū)存儲(chǔ)有各內(nèi)核的標(biāo)志位、各文件系統(tǒng)的標(biāo)志位,用來(lái)表示各內(nèi)核和文件系 統(tǒng)是否正常,還存儲(chǔ)有表示當(dāng)前內(nèi)核和文件系統(tǒng)是否正常的異常標(biāo)志e-flag,表示上次 是否正常啟動(dòng)的啟動(dòng)標(biāo)志s-flag ;各內(nèi)核和文件系統(tǒng)正常的標(biāo)志位可以設(shè)為0,異常標(biāo)志 位可以設(shè)置為1,也可由其他值表示各內(nèi)核和文件系統(tǒng)的正常狀態(tài)和異常狀態(tài);啟動(dòng)標(biāo)志 s-flag為0時(shí)表示上次系統(tǒng)啟動(dòng)正常,也可以用其他數(shù)值標(biāo)識(shí)啟動(dòng)標(biāo)志的正常啟動(dòng)狀態(tài); 異常標(biāo)志e-flag為0時(shí)表示當(dāng)前使用的內(nèi)核和文件系統(tǒng)正常,為其它數(shù)值時(shí)表示當(dāng)前使用 的內(nèi)核和文件系統(tǒng)異常,也可以用其他數(shù)值表示當(dāng)前使用的內(nèi)核和文件系統(tǒng)的正常狀態(tài);
[0030] 設(shè)備上電時(shí)開始運(yùn)行引導(dǎo)程序,若啟動(dòng)標(biāo)志s-flag為0時(shí)表示上次系統(tǒng)啟動(dòng)正 常,則讀取的啟動(dòng)標(biāo)志為1或2等時(shí),表示上次系統(tǒng)啟動(dòng)異常,即當(dāng)前的內(nèi)核和文件系統(tǒng)所 在的存儲(chǔ)空間可能出現(xiàn)損壞,則增加異常標(biāo)志的次數(shù),例如將異常標(biāo)志e-flag設(shè)置為1,每 次讀取的啟動(dòng)標(biāo)志不為〇時(shí),就增加異常標(biāo)志的次數(shù);
[0031] 為了避免由于其它原因造成的系統(tǒng)啟動(dòng)異常,而直接啟動(dòng)新的內(nèi)核或文件系統(tǒng), 同時(shí)也為了節(jié)省存儲(chǔ)空間損壞時(shí)系統(tǒng)啟動(dòng)的時(shí)間,閾值可以設(shè)置為3?10次,例如將閾值 設(shè)置為5,那么當(dāng)讀取的異常標(biāo)志的值為5,且啟動(dòng)標(biāo)志表示啟動(dòng)不正常時(shí),則啟動(dòng)新的內(nèi) 核或文件系統(tǒng);
[0032] 異常標(biāo)志為異常的次數(shù)滿足閾值時(shí),為了能夠判斷是當(dāng)前內(nèi)核所在的存儲(chǔ)空間出 現(xiàn)損壞,還是文件系統(tǒng)所在的存儲(chǔ)空間出現(xiàn)損壞,進(jìn)而是啟動(dòng)新的內(nèi)核還是新的文件系統(tǒng), 需要設(shè)置標(biāo)示內(nèi)核和文件系統(tǒng)啟動(dòng)狀態(tài)的不同的啟動(dòng)標(biāo)識(shí),例如啟動(dòng)標(biāo)志為1時(shí)表示內(nèi)核 損壞,啟動(dòng)標(biāo)志為2時(shí)表示文件系統(tǒng)損壞,具體設(shè)置的流程詳見步驟S120和步驟S140 ;
[0033] S120、從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所述內(nèi)核并將所述 文件系統(tǒng)的引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志;
[0034] 此步驟的啟動(dòng)標(biāo)志可以設(shè)置為1,也可以設(shè)置為其他數(shù)值;
[0035] S130、運(yùn)行內(nèi)核,若內(nèi)核運(yùn)行出現(xiàn)異常,返回步驟S110,否則進(jìn)入步驟S140 ;
[0036] 若步驟S110中讀取的啟動(dòng)標(biāo)志為1,說(shuō)明嵌入式系統(tǒng)并沒(méi)有成功運(yùn)行內(nèi)核,內(nèi)核 的存儲(chǔ)空間可能損壞等;
[0037] S140、在內(nèi)核運(yùn)行完成時(shí),設(shè)置所述啟動(dòng)標(biāo)志,并通過(guò)引導(dǎo)程序傳的環(huán)境變量加載 文件系統(tǒng);
[0038] 此步驟的啟動(dòng)標(biāo)志可以設(shè)置為2或其它數(shù)值,但是要與步驟S120中設(shè)置的啟動(dòng)標(biāo) 志的值相區(qū)別,若嵌入式系統(tǒng)不能正常啟動(dòng),步驟S110中讀取的啟動(dòng)標(biāo)志為2,則說(shuō)明內(nèi)核 已經(jīng)成功運(yùn)行,但是文件系統(tǒng)沒(méi)有成功運(yùn)行,進(jìn)而判斷出是文件系統(tǒng)所在的存儲(chǔ)空間可能 出現(xiàn)損壞;
[0039] S150、運(yùn)行文件系統(tǒng),若文件系統(tǒng)運(yùn)行出現(xiàn)異常,返回步驟S110,否則進(jìn)入步驟 S160 ;
[0040] S160、系統(tǒng)啟動(dòng)完成。
[0041] 根據(jù)在內(nèi)核加載完成后設(shè)置啟動(dòng)標(biāo)志的值,和內(nèi)核運(yùn)行完成后設(shè)置啟動(dòng)標(biāo)志的 值,來(lái)判斷運(yùn)行出現(xiàn)異常的是當(dāng)前內(nèi)核還是文件系統(tǒng),既可以確定是啟動(dòng)新的標(biāo)志位正常 的內(nèi)核還是文件系統(tǒng),保證了嵌入式啟動(dòng)的正常啟動(dòng)。
[0042] 為了避免系統(tǒng)啟動(dòng)異常的內(nèi)核或文件系統(tǒng),步驟S110中異常標(biāo)志次數(shù)滿足閾值 且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位正常的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前 內(nèi)核或文件系統(tǒng)的步驟之前,還可以包括步驟:
[0043] 將當(dāng)前內(nèi)核或文件系統(tǒng)標(biāo)志位設(shè)為異常,所述異常標(biāo)志次數(shù)清零,例如將當(dāng)前內(nèi) 核或文件系統(tǒng)的標(biāo)志位設(shè)為1,異常標(biāo)志設(shè)為〇等。
[0044] 系統(tǒng)啟動(dòng)出現(xiàn)異常時(shí),為了實(shí)現(xiàn)自動(dòng)復(fù)位,恢復(fù)到運(yùn)行引導(dǎo)程序的步驟,本發(fā)明還 需要看門狗。所以步驟S110中運(yùn)行引導(dǎo)程序的步驟之后,讀取異常標(biāo)志和啟動(dòng)標(biāo)志的步驟 之前,還可以包括初始化看門狗的步驟。
[0045] 若當(dāng)前內(nèi)核所在的存儲(chǔ)空間出現(xiàn)異常,系統(tǒng)運(yùn)行到當(dāng)前內(nèi)核時(shí)停止,不會(huì)重置看 門狗,看門狗的喂狗時(shí)間到達(dá)后系統(tǒng)復(fù)位,系統(tǒng)自動(dòng)運(yùn)行到運(yùn)行引導(dǎo)程序的步驟,當(dāng)前文件 系統(tǒng)所在的存儲(chǔ)空間出現(xiàn)異常時(shí),看門狗復(fù)位系統(tǒng)的原理類似。
[0046] 為了避免對(duì)下次系統(tǒng)啟動(dòng)產(chǎn)生影響,文件系統(tǒng)運(yùn)行完成時(shí),還可以包括步驟:將所 述啟動(dòng)標(biāo)志設(shè)置為啟動(dòng)正常,所述異常標(biāo)志次數(shù)清零。
[0047] 為了較好的理解本發(fā)明方法,下面結(jié)合存儲(chǔ)設(shè)備正常和異常的具體實(shí)施例對(duì)本發(fā) 明方法詳細(xì)說(shuō)明。
[0048] 以64M的nand flash存儲(chǔ)設(shè)備為例,如圖2所示,nand flash被劃分為6個(gè)分區(qū), 依次為 bootloader, kernel_l,fileSystem_l,kernel_2,fileSystem_2,param(參數(shù)區(qū))。 Boo 11 oader為引導(dǎo)程序,用來(lái)加載內(nèi)核。Par am為參數(shù)區(qū),用來(lái)存放標(biāo)志位,標(biāo)志位包括 kernel-1是否正常的標(biāo)志k-f lag,fileSystem_l是否正常的標(biāo)志f-f lag,啟動(dòng)標(biāo)志s-f lag, 異常標(biāo)志e-flag。系統(tǒng)正常狀況下四個(gè)標(biāo)志位都為0。
[0049] 存儲(chǔ)設(shè)備正常的情況下,嵌入式系統(tǒng)啟動(dòng)的流程如下:
[0050] 1、設(shè)備上電后,運(yùn)行bootloader,初始化硬件看門狗,讀取e-flag為0,表示當(dāng)前 的內(nèi)核和文件系統(tǒng)正常,讀取s-f lag為0,表示上次啟動(dòng)正常;
[0051] 2、從 Param 區(qū)讀取 k-flag 和 f-flag 都為 0,則加載 kernel-Ι 并將 fileSystem-1 的引導(dǎo)變量傳給kernel-1,然后設(shè)置s-f lag為1 ;
[0052] 3、系統(tǒng)運(yùn)行到kernel-1,此時(shí)需要在內(nèi)核中多次重置看門狗,避免看門狗的喂狗 時(shí)間到達(dá)從而引起系統(tǒng)復(fù)位,在內(nèi)核啟動(dòng)完后將s-flag設(shè)置為2,并通過(guò)bootloader上傳 的環(huán)境變量啟動(dòng)fileSystem-1 ;
[0053] 4、fileSystem-l初始化后啟動(dòng)一些系統(tǒng)腳本,加載完驅(qū)動(dòng)程序,然后啟動(dòng)業(yè)務(wù)應(yīng)用 程序。在業(yè)務(wù)應(yīng)用程序中將s-f lag和e-flag設(shè)置為0,并定時(shí)重置看門狗,至此,整個(gè)嵌入 式系統(tǒng)啟動(dòng)完畢。
[0054] 當(dāng)kernel-Ι所在的物理存儲(chǔ)空間出現(xiàn)損壞,導(dǎo)致系統(tǒng)無(wú)法正常啟動(dòng)時(shí),流程如 下:
[0055] 1、設(shè)備上電后,運(yùn)行bootloader,初始化硬件看門狗,讀取e-flag為0,表示當(dāng)前 的內(nèi)核和文件系統(tǒng)正常,讀取s-flag為0,表示上次啟動(dòng)正常;
[0056] 2、從 Param 區(qū)讀取 k-flag 和 f-flag 都為 0,則加載 kernel-Ι 并將 fileSystem-1 的引導(dǎo)變量傳給kernel-1,然后設(shè)置s-flag為1 ;
[0057] 3、系統(tǒng)運(yùn)行到kernel-Ι,此時(shí)因?yàn)閗ernel-Ι的物理存儲(chǔ)空間損壞,系統(tǒng)停止 運(yùn)行,所以也不會(huì)重置看門狗,看門狗的喂狗時(shí)間到達(dá)后導(dǎo)致系統(tǒng)復(fù)位,系統(tǒng)又運(yùn)行到了 bootloader ;
[0058] 4、bootloader重新初始化看門狗,讀取e-flag為0,然后讀取s-flag為1,表示 上次系統(tǒng)啟動(dòng)異常,將e-flag設(shè)置為1。然后又啟動(dòng)kernel-Ι和fileSystem-Ι ;
[0059] 5、同樣,系統(tǒng)又會(huì)在kernel-1處停止,看門狗會(huì)復(fù)位系統(tǒng),然后重復(fù)第四步,但是 e-flag每次遞增1。
[0060] 6、當(dāng)讀取的e-flag為5時(shí),若還是無(wú)法正常啟動(dòng)kernel-Ι,則將k-flag設(shè)置為 1,表不kernel-Ι已經(jīng)損壞。然后將e-flag設(shè)置為0,啟動(dòng)kernel-2,即加載kernel-2并 將fileSystem-Ι的引導(dǎo)變量傳給kernel-2 ;
[0061] 7、系統(tǒng)運(yùn)行到kernel-2,由于kernel-2為正常內(nèi)核,系統(tǒng)可以正常運(yùn)行,此時(shí)需 要在kernel-2中多次重置看門狗,避免看門狗的喂狗時(shí)間到達(dá)從而引起系統(tǒng)復(fù)位,在內(nèi)核 啟動(dòng)完后將s-flag設(shè)置為2,并通過(guò)bootloader上傳的環(huán)境變量啟動(dòng)fileSystem-1 ;
[0062] 8、fileSystem-l初始化后啟動(dòng)一些系統(tǒng)腳本,加載完驅(qū)動(dòng)程序,然后啟動(dòng)業(yè)務(wù)應(yīng)用 程序。在業(yè)務(wù)應(yīng)用程序中將s-flag和e-flag設(shè)置為0,并定時(shí)重置看門狗,至此,整個(gè)嵌入 式系統(tǒng)啟動(dòng)完畢。
[0063] 當(dāng)文件系統(tǒng)出現(xiàn)異常,也就是fileSystem-1所在的物理存儲(chǔ)空間出現(xiàn)損壞導(dǎo)致系 統(tǒng)無(wú)法正常啟動(dòng)時(shí),系統(tǒng)自動(dòng)恢復(fù)流程除了在bootloader讀到的s-flag為2,其他流程與 上述kernel-Ι出現(xiàn)損壞的啟動(dòng)流程基本一致,在此不予贅述。
[0064] 基于同一發(fā)明構(gòu)思,本發(fā)明還提供一種嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,下面結(jié) 合附圖對(duì)本發(fā)明裝置的【具體實(shí)施方式】做詳細(xì)描述。
[0065] 如圖3所示,一種嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,包括:
[0066] 引導(dǎo)程序運(yùn)行模塊110,用于運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng) 標(biāo)志確定是否增加異常標(biāo)志的次數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí), 根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位正常的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo) 志表示當(dāng)前內(nèi)核和文件系統(tǒng)是否正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常;
[0067] 存儲(chǔ)設(shè)備上可以設(shè)置有多個(gè)內(nèi)核和多個(gè)文件系統(tǒng),在當(dāng)前內(nèi)核或文件系統(tǒng)出現(xiàn)損 壞時(shí),啟動(dòng)其它的標(biāo)志位正常的內(nèi)核或文件系統(tǒng),也可以設(shè)置有一個(gè)內(nèi)核和多個(gè)文件系統(tǒng), 解決文件系統(tǒng)出現(xiàn)損壞時(shí),系統(tǒng)不能正常啟動(dòng)的問(wèn)題,同樣也可以設(shè)置有多個(gè)內(nèi)核和一個(gè) 文件系統(tǒng),解決內(nèi)核出現(xiàn)損壞時(shí),系統(tǒng)不能正常啟動(dòng)的問(wèn)題;
[0068] 為了避免由于其它原因造成的系統(tǒng)啟動(dòng)異常,而直接啟動(dòng)新的內(nèi)核或文件系統(tǒng), 同時(shí)也為了節(jié)省存儲(chǔ)空間損壞時(shí)系統(tǒng)啟動(dòng)的時(shí)間,閾值可以設(shè)置為3?10次;
[0069] 異常標(biāo)志為異常的次數(shù)滿足閾值時(shí),為了能夠判斷是當(dāng)前內(nèi)核所在的存儲(chǔ)空間出 現(xiàn)損壞,還是文件系統(tǒng)所在的存儲(chǔ)空間出現(xiàn)損壞,需要設(shè)置標(biāo)示內(nèi)核和文件系統(tǒng)啟動(dòng)狀態(tài) 的不同的啟動(dòng)標(biāo)識(shí),例如啟動(dòng)標(biāo)志為1時(shí)表示內(nèi)核損壞,啟動(dòng)標(biāo)志為2時(shí)表示文件系統(tǒng)損 壞;
[0070] 內(nèi)核加載模塊120,用于從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所 述內(nèi)核并將所述文件系統(tǒng)的引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志,例如設(shè)置為1等;
[0071] 內(nèi)核運(yùn)行模塊130,用于運(yùn)行內(nèi)核,在內(nèi)核運(yùn)行出現(xiàn)異常時(shí)復(fù)位,引導(dǎo)程序運(yùn)行模 塊110重新運(yùn)行引導(dǎo)程序,在內(nèi)核運(yùn)行完成時(shí)設(shè)置所述啟動(dòng)標(biāo)志,例如設(shè)置為2等;
[0072] 文件系統(tǒng)加載模塊140,用于通過(guò)引導(dǎo)程序傳的環(huán)境變量加載文件系統(tǒng);
[0073] 文件系統(tǒng)運(yùn)行模塊150,用于運(yùn)行文件系統(tǒng),在文件系統(tǒng)運(yùn)行出現(xiàn)異常時(shí)復(fù)位,弓丨 導(dǎo)程序運(yùn)行模塊110重新運(yùn)行引導(dǎo)程序。文件系統(tǒng)運(yùn)行成功時(shí),嵌入式系統(tǒng)啟動(dòng)完成。
[0074] 為了避免系統(tǒng)啟動(dòng)異常的內(nèi)核或文件系統(tǒng),所述引導(dǎo)程序運(yùn)行模塊110還用于在 異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),將當(dāng)前內(nèi)核或文件系統(tǒng)標(biāo)志位設(shè)為異 常,所述異常標(biāo)志次數(shù)清零。
[0075] 系統(tǒng)啟動(dòng)出現(xiàn)異常時(shí),為了實(shí)現(xiàn)自動(dòng)復(fù)位,恢復(fù)到運(yùn)行引導(dǎo)程序的步驟,本發(fā)明還 需要看門狗。所以所述引導(dǎo)程序運(yùn)行模塊110還用于在運(yùn)行引導(dǎo)程序之后,初始化看門狗。
[0076] 若當(dāng)前內(nèi)核所在的存儲(chǔ)空間出現(xiàn)異常,系統(tǒng)運(yùn)行到當(dāng)前內(nèi)核時(shí)停止,不會(huì)重置看 門狗,看門狗的喂狗時(shí)間到達(dá)后系統(tǒng)復(fù)位,系統(tǒng)自動(dòng)運(yùn)行到運(yùn)行引導(dǎo)程序的步驟,當(dāng)前文件 系統(tǒng)所在的存儲(chǔ)空間出現(xiàn)異常時(shí),看門狗復(fù)位系統(tǒng)的原理類似。
[0077] 為了避免對(duì)下次系統(tǒng)啟動(dòng)產(chǎn)生影響,所述文件系統(tǒng)運(yùn)行模塊150在文件系統(tǒng)運(yùn)行 完成時(shí),還用于將所述啟動(dòng)標(biāo)志設(shè)置為啟動(dòng)正常,所述異常標(biāo)志次數(shù)清零。
[0078] 本發(fā)明裝置其它技術(shù)特征與本發(fā)明方法相同,在此不予贅述。
[0079] 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以 通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為 磁碟、光盤、只讀存儲(chǔ)記憶體(Read-Only Memory, ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memory,RAM)等。
[0080] 以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并 不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員 來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保 護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
【權(quán)利要求】
1. 一種嵌入式系統(tǒng)啟動(dòng)異常的處理方法,其特征在于,包括步驟: 運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng)標(biāo)志確定是否增加異常標(biāo)志的次 數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位正常的新 的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo)志表示當(dāng)前內(nèi)核和文件系統(tǒng)是否 正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常; 從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所述內(nèi)核并將所述文件系統(tǒng)的 引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志; 運(yùn)行內(nèi)核,若內(nèi)核運(yùn)行出現(xiàn)異常,返回運(yùn)行引導(dǎo)程序的步驟,否則在內(nèi)核運(yùn)行完成時(shí), 設(shè)置所述啟動(dòng)標(biāo)志,并通過(guò)引導(dǎo)程序傳的環(huán)境變量加載文件系統(tǒng); 運(yùn)行文件系統(tǒng),若文件系統(tǒng)運(yùn)行出現(xiàn)異常,返回運(yùn)行引導(dǎo)程序的步驟。
2. 根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)啟動(dòng)異常的處理方法,其特征在于,異常標(biāo)志次 數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng)標(biāo)志將標(biāo)志位正常的新的內(nèi)核或文件系 統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng)的步驟之前,還包括步驟: 將當(dāng)前內(nèi)核或文件系統(tǒng)標(biāo)志位設(shè)為異常,所述異常標(biāo)志次數(shù)清零。
3. 根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)啟動(dòng)異常的處理方法,其特征在于,運(yùn)行引導(dǎo)程 序的步驟之后,讀取異常標(biāo)志和啟動(dòng)標(biāo)志的步驟之前,還包括初始化看門狗的步驟。
4. 根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)啟動(dòng)異常的處理方法,其特征在于,文件系統(tǒng)運(yùn) 行完成時(shí),還包括步驟: 將所述啟動(dòng)標(biāo)志設(shè)置為啟動(dòng)正常,所述異常標(biāo)志次數(shù)清零。
5. 根據(jù)權(quán)利要求1至4任意一項(xiàng)所述的嵌入式系統(tǒng)啟動(dòng)異常的處理方法,其特征在于, 所述閾值為3?10。
6. -種嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,其特征在于,包括: 引導(dǎo)程序運(yùn)行模塊,用于運(yùn)行引導(dǎo)程序,讀取異常標(biāo)志和啟動(dòng)標(biāo)志,根據(jù)啟動(dòng)標(biāo)志確定 是否增加異常標(biāo)志的次數(shù),異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),根據(jù)啟動(dòng) 標(biāo)志將標(biāo)志位正常的新的內(nèi)核或文件系統(tǒng)作為當(dāng)前內(nèi)核或文件系統(tǒng),其中異常標(biāo)志表示當(dāng) 前內(nèi)核和文件系統(tǒng)是否正常,啟動(dòng)標(biāo)志表示上次啟動(dòng)是否正常; 內(nèi)核加載模塊,用于從參數(shù)區(qū)讀取標(biāo)志位正常的當(dāng)前內(nèi)核和文件系統(tǒng),加載所述內(nèi)核 并將所述文件系統(tǒng)的引導(dǎo)變量傳給所述內(nèi)核,設(shè)置所述啟動(dòng)標(biāo)志; 內(nèi)核運(yùn)行模塊,用于運(yùn)行內(nèi)核,在內(nèi)核運(yùn)行出現(xiàn)異常時(shí)復(fù)位,在內(nèi)核運(yùn)行完成時(shí)設(shè)置所 述啟動(dòng)標(biāo)志; 文件系統(tǒng)加載模塊,用于通過(guò)引導(dǎo)程序傳的環(huán)境變量加載文件系統(tǒng); 文件系統(tǒng)運(yùn)行模塊,用于運(yùn)行文件系統(tǒng),在文件系統(tǒng)運(yùn)行出現(xiàn)異常時(shí)復(fù)位。
7. 根據(jù)權(quán)利要求6所述的嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,其特征在于,所述引導(dǎo)程 序運(yùn)行模塊還用于在異常標(biāo)志次數(shù)滿足閾值且啟動(dòng)標(biāo)志表示啟動(dòng)異常時(shí),將當(dāng)前內(nèi)核或文 件系統(tǒng)標(biāo)志位設(shè)為異常,所述異常標(biāo)志次數(shù)清零。
8. 根據(jù)權(quán)利要求6所述的嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,其特征在于,所述引導(dǎo)程 序運(yùn)行模塊還用于在運(yùn)行引導(dǎo)程序之后,初始化看門狗。
9. 根據(jù)權(quán)利要求6所述的嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,其特征在于,所述文件系 統(tǒng)運(yùn)行模塊在文件系統(tǒng)運(yùn)行完成時(shí),還用于將所述啟動(dòng)標(biāo)志設(shè)置為啟動(dòng)正常,所述異常標(biāo) 志次數(shù)清零。
10.根據(jù)權(quán)利要求6至9任意一項(xiàng)所述的嵌入式系統(tǒng)啟動(dòng)異常的處理裝置,其特征在 于,所述閾值為3?10。
【文檔編號(hào)】G06F17/30GK104063477SQ201410309374
【公開日】2014年9月24日 申請(qǐng)日期:2014年6月30日 優(yōu)先權(quán)日:2014年6月30日
【發(fā)明者】謝勝, 陳 全 申請(qǐng)人:廣東威創(chuàng)視訊科技股份有限公司