專利名稱:一種系統(tǒng)啟動引導(dǎo)處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別是涉及一種系統(tǒng)啟動引導(dǎo)處理方法以及相應(yīng)的
直O(jiān)
背景技術(shù):
在很多Linux嵌入式系統(tǒng)中,在初始化軟硬件系統(tǒng)并引導(dǎo)Linux內(nèi)核時,都需要一個引導(dǎo)裝置來引導(dǎo)Linux操作系統(tǒng),從而Linux操作系統(tǒng)能正常啟動。它所用到的一些系統(tǒng)基本參數(shù),稱為環(huán)境變量,比如網(wǎng)絡(luò)的IP地址,系統(tǒng)的分區(qū)設(shè)置,內(nèi)存的設(shè)置參數(shù),內(nèi)核的引導(dǎo)參數(shù)等等,都被保存到一個區(qū)域。環(huán)境變量被保存在非易失閃存(NAND Flash)上的一個特定區(qū)域中,該區(qū)域以塊為單位,系統(tǒng)開機時,引導(dǎo)裝置會從NAND Flash內(nèi)存上讀出整個環(huán)境變量并存放于內(nèi)存,之后便只在內(nèi)存中訪問環(huán)境變量。如果環(huán)境變量有更新,可以將這種更新同步到NANDFlash內(nèi)存上。相對于NOR Flash內(nèi)存,NAND Flash內(nèi)存以其訪問速度快、容量大、單位容量的成本低廉等特點,在嵌入式領(lǐng)域越來越廣泛地被用作存放數(shù)據(jù)的載體。雖然NAND Flash內(nèi)存有容量和成本上的優(yōu)勢,但其存在固有的缺陷,即可靠性相對較差。因此,當(dāng)存放在NAND Flash內(nèi)存內(nèi)特定區(qū)域的環(huán)境變量存在不可糾正的錯誤或損壞時,系統(tǒng)無法正常啟動。環(huán)境變量是否為錯誤或已經(jīng)被損壞直接關(guān)系到系統(tǒng)能否正常啟動,因此當(dāng)其存在錯誤或已經(jīng)被損壞時,會大大影響用戶體驗度。所以環(huán)境變量非常重要,而如此重要的數(shù)據(jù)其存儲的可靠性卻比較差。這是亟待解決的問題。
發(fā)明內(nèi)容
本發(fā)明主要解決的技術(shù)問題是提供一種系統(tǒng)啟動引導(dǎo)處理方法及裝置,能夠極大地提高系統(tǒng)可靠性,使得在讀取環(huán)境變量出錯時仍然能正常讀取,從而不影響系統(tǒng)的正常開機。為解決上述技術(shù)問題,本發(fā)明采用的一個技術(shù)方案是一種系統(tǒng)啟動引導(dǎo)處理方法,包括從非易失閃存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;判斷所述環(huán)境變量是否有不可糾正錯誤并累計所述不可糾正錯誤的連續(xù)累計次數(shù);如果不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值,則讀取所述環(huán)境變量的備份變量,其中,該備份變量為環(huán)境變量的備份;以及根據(jù)所述備份變量恢復(fù)損壞的環(huán)境變量。本發(fā)明還提供與上述方法對應(yīng)的裝置一種系統(tǒng)啟動引導(dǎo)處理的裝置,包括第一讀取模塊,用于從NAND Flash內(nèi)存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;第一判斷模塊,用于判斷所述環(huán)境變量是否有不可糾正錯誤;
累計模塊,當(dāng)所述第一判斷模塊判斷出環(huán)境變量有不可糾正錯誤時,累計所述不可糾正錯誤的連續(xù)累計次數(shù);第二讀取模塊,當(dāng)所述累計模塊累計的不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值時,讀取所述環(huán)境變量的備份變量,其中,該備份變量為環(huán)境變量的備份;恢復(fù)模塊,用于根據(jù)第二讀取模塊讀取的備份變量恢復(fù)損壞的環(huán)境變量。本發(fā)明的有益效果是區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明針對環(huán)境變量在NAND Flash內(nèi)存中易損壞的情況,采取了應(yīng)對措施,比如多次讀取環(huán)境變量時都出現(xiàn)不可糾正錯誤才確定該環(huán)境變量出現(xiàn)不可糾正的錯誤,當(dāng)確定環(huán)境變量出現(xiàn)不可糾正錯誤時,讀取備份變量,并根據(jù)備份變量恢復(fù)損壞的環(huán)境變量,從而能引導(dǎo)系統(tǒng)正常啟動,并且極大提高了系統(tǒng)可靠性,提高了用戶體驗度。
圖1是本發(fā)明系統(tǒng)啟動引導(dǎo)處理方法的實施例的數(shù)據(jù)流程圖;圖2是本發(fā)明系統(tǒng)啟動引導(dǎo)處理方法的實施例中壞塊的處理及環(huán)境變量的寫入流程的數(shù)據(jù)流程圖;圖3是本發(fā)明系統(tǒng)啟動引導(dǎo)處理的裝置的邏輯結(jié)構(gòu)示意圖;圖4是本發(fā)明系統(tǒng)啟動引導(dǎo)處理的裝置的另一邏輯結(jié)構(gòu)示意圖。
具體實施例方式參閱圖1,本發(fā)明系統(tǒng)啟動引導(dǎo)處理方法的實施例包括101、從非易失閃存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;Linux嵌入式設(shè)備在開機時,設(shè)備CPU在NAND Flash內(nèi)存中讀取系統(tǒng)啟動必需的環(huán)境變量。由于NAND Flash內(nèi)存存儲數(shù)據(jù)的可靠性較差,讀取數(shù)據(jù)時有出錯的可能, 所以通常每個頁面(page)的數(shù)據(jù)會附加一個錯誤檢查和糾正(ECC,Error Checking and Correcting)校驗碼。一般的,對于少量的比特錯誤,即可糾正錯誤,ECC校驗碼可以糾正; 而大量的比特錯誤,即不可糾正錯誤,ECC校驗碼無法糾正,但是可以報錯。102、判斷環(huán)境變量是否有不可糾正錯誤;CPU在NAND Flash內(nèi)存中讀取系統(tǒng)啟動必需的環(huán)境變量后,判斷該環(huán)境變量是否有不可糾正錯誤,即是否有大量的比特錯誤。103、判斷環(huán)境變量是否有可糾正錯誤;如果在步驟102中判斷出環(huán)境變量沒有不可糾正錯誤,則再判斷該環(huán)境變量是否有可糾正錯誤,即是否有少量的比特錯誤;如果有,則執(zhí)行步驟104,如果沒有,則根據(jù)讀取的環(huán)境變量啟動系統(tǒng)。104、重新將環(huán)境變量寫入至NAND Flash內(nèi)存中;如果在步驟103中判斷出環(huán)境變量有可糾正錯誤,則將該環(huán)境變量所在的內(nèi)存塊擦除,并且將正確無誤的環(huán)境變量重新寫一遍;因為可糾正錯誤雖然通過ECC校驗碼可以糾正,數(shù)據(jù)的完整性沒有破壞,但是也說明了 NAND Flash內(nèi)存中存放的數(shù)據(jù)已經(jīng)有損壞了, 如果不及時處理,可能會發(fā)展成不可糾正錯誤,從而使系統(tǒng)無法正常開機。105、判斷是否達(dá)到不可糾正錯誤的連續(xù)累計次數(shù)的預(yù)設(shè)閾值;
當(dāng)讀取一次環(huán)境變量發(fā)現(xiàn)有不可糾正錯誤時,有可能是真的數(shù)據(jù)損壞,也有可能只是某些偶然因素導(dǎo)致一次讀取錯誤,而NAND Flash內(nèi)存中存儲的數(shù)據(jù)并沒有損壞,為了避免后一種情況的干擾,一次讀取失敗不認(rèn)為數(shù)據(jù)被損壞了,而是反復(fù)多讀取幾次,并且每次讀取都判斷讀取的環(huán)境變量是否有不可糾正錯誤,如果連續(xù)讀取幾次的環(huán)境變量都有不可糾正錯誤,才會認(rèn)為NAND Flash內(nèi)存中存儲的數(shù)據(jù)損壞了 ;所以,在本地預(yù)先設(shè)置一個閾值,例如可以是連續(xù)讀取3次的環(huán)境變量都有不可糾正錯誤,或者連續(xù)讀取5次的環(huán)境變量都有不可糾正錯誤等等。在步驟102中判斷出環(huán)境變量有不可糾正錯誤時,繼續(xù)讀取NAND Flash內(nèi)存中存儲的環(huán)境變量并判斷是否有不可糾正錯誤并累計該不可糾正錯誤的連續(xù)累計次數(shù),直至該不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值,只有當(dāng)連續(xù)讀取幾次都失敗的情況下,才認(rèn)為NANDFlash內(nèi)存中存儲的數(shù)據(jù)損壞了。106、讀取失?。蝗缜笆?,如果連續(xù)讀取幾次都失敗了,即連續(xù)讀取閾值次的環(huán)境變量都有不可糾正錯誤,則確認(rèn)NAND Flash內(nèi)存中存儲的環(huán)境變量損壞了 ;107、保存出錯的環(huán)境變量;當(dāng)確認(rèn)NAND Flash內(nèi)存中存儲的數(shù)據(jù)已經(jīng)損壞時,將出錯的環(huán)境變量保存到NAND Flash內(nèi)存中的一個特定區(qū)域,這大大方便了后續(xù)的調(diào)試,可以使調(diào)試者清楚環(huán)境變量是如何被破壞的,從而可以采取相應(yīng)的措施,避免下次再次被破壞。108、判斷備份是否可用;本發(fā)明實施例中,在NAND Flash內(nèi)存中保存至少2份環(huán)境變量數(shù)據(jù),以使得當(dāng)一份環(huán)境變量損壞時,可以啟用該環(huán)境變量的備份變量;當(dāng)如步驟106所述確認(rèn)環(huán)境變量損壞時,需要啟用備份變量,首先判斷備份變量是否可用。109、讀取備份變量;如果在步驟108中判斷出備份變量可用時,讀取備份變量,然后執(zhí)行步驟110。110、用備份變量恢復(fù)損壞的環(huán)境變量;讀取備份變量后,用備份變量恢復(fù)損壞的環(huán)境變量,從而確保系統(tǒng)能正常啟動。111、讀取默認(rèn)環(huán)境變量;如果在步驟108中判斷出備份變量不可用時,啟用最后一道防線,即使用默認(rèn)環(huán)境變量;默認(rèn)環(huán)境變量是寫在Mboot (系統(tǒng)啟動引導(dǎo)軟件)的源代碼中的,設(shè)定默認(rèn)環(huán)境變量的默認(rèn)值為可開機的配置,這樣,就算備份變量也被損壞或者NAND Flash內(nèi)存中沒有存儲環(huán)境變量時,使用默認(rèn)環(huán)境變量,系統(tǒng)也能正常開機運行;因為默認(rèn)環(huán)境變量是寫在Mboot的源代碼中的,它是無法更新的,所以它缺乏靈活性,使用默認(rèn)環(huán)境變量是最后一道防線,可以確保正常開機,相比完全無法開機,大大提高了用戶體驗度。進(jìn)一步的,因為NAND Flash內(nèi)存的物理特性,在對環(huán)境變量進(jìn)行更新時,需要先擦除老的存儲塊,再寫入新的環(huán)境變量,如果在更新過程中,突然斷電,會導(dǎo)致環(huán)境變量的不完整更新,從而使下一次開機時有可能出現(xiàn)無法引導(dǎo)操作系統(tǒng)內(nèi)核的情況,使系統(tǒng)無法正常啟動;為解決這一問題,可以在NAND Flash內(nèi)存中存儲兩份內(nèi)容相同,互為備份的環(huán)境變量,一份為每次開機需要讀取的環(huán)境變量,另一份為該環(huán)境變量的備份變量,該備份變量即為上述步驟109中讀取的備份變量;并且,在更新環(huán)境變量時,需要對兩份環(huán)境變量依次更新,所以,即使在更新過程中發(fā)生斷電情況,最多只會損壞一份環(huán)境變量,而另外一份環(huán)境變量是完整的,這樣就不會下一次的影響正常開機,并且可以使用完整的環(huán)境變量來恢復(fù)損壞的環(huán)境變量;具體的當(dāng)對環(huán)境變量進(jìn)行更新時,先擦除該環(huán)境變量所在的內(nèi)存塊,并寫入新環(huán)境變量; 再擦除該環(huán)境變量的備份變量所在的內(nèi)存塊,并寫入所述新環(huán)境變量的備份變量。進(jìn)一步的,因為NAND Flash內(nèi)存的硬件特性,NAND Flash內(nèi)存在出廠時,某些內(nèi)存塊就可能是損壞的,而在使用過程中,某些好的內(nèi)存塊也會變成損壞的內(nèi)存塊;因此,如果環(huán)境變量所在的內(nèi)存塊是損壞的內(nèi)存塊,會導(dǎo)致環(huán)境變量損壞或者無法存儲。所以,在實際給環(huán)境變量分配內(nèi)存塊時,至少分配2個內(nèi)存塊,具體塊數(shù)根據(jù)需要靈活調(diào)整,此處不做限制;具體的,對損壞了的內(nèi)存塊的處理及環(huán)境變量的寫入流程請參閱圖2 201、獲取備份變量所用內(nèi)存塊;當(dāng)?shù)谝淮螌懭氕h(huán)境變量時,首先獲取備份變量所用內(nèi)存塊。202、判斷是否為好的內(nèi)存塊;判斷備份變量所用內(nèi)存塊是否為未損壞的塊,如果不是,執(zhí)行步驟203,如果是,執(zhí)行步驟204。203、獲取下一個內(nèi)存塊;如果步驟202中判斷出備份變量所用內(nèi)存塊是損壞了的內(nèi)存塊,則獲取下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊。204、內(nèi)存塊擦除;如果步驟202中判斷出備份變量所用內(nèi)存塊是未損壞的內(nèi)存塊,則對該內(nèi)存塊進(jìn)行擦除處理。205、寫備份變量;在擦除塊后,將備份變量寫入該內(nèi)存塊。206、獲取環(huán)境變量所用內(nèi)存塊;獲取環(huán)境變量所用內(nèi)存塊是否是損壞的內(nèi)存塊。207、是否為好的內(nèi)存塊;判斷環(huán)境變量所用塊是否為好的內(nèi)存塊,即是否未損壞,如果不是,執(zhí)行步驟208, 如果是,執(zhí)行步驟209。208、獲取下一個內(nèi)存塊;如果步驟207中判斷出環(huán)境變量所用內(nèi)存塊是損壞了的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到好的內(nèi)存塊。209、內(nèi)存塊擦除;如果步驟207中判斷出環(huán)境變量所用內(nèi)存塊是好的內(nèi)存塊,則對該內(nèi)存塊進(jìn)行擦除處理。210、寫環(huán)境變量;在擦除內(nèi)存塊后,將環(huán)境變量寫入該內(nèi)存塊。步驟201至210中,是先檢查備份變量所用內(nèi)存塊,寫備份變量,然后再檢查環(huán)境變量所用內(nèi)存塊,寫環(huán)境變量的,也可以先執(zhí)行206至210的步驟,再執(zhí)行201至205的步驟,即先檢查環(huán)境變量所用內(nèi)存塊,寫環(huán)境變量,然后再檢查備份變量所用內(nèi)存塊,寫備份變量;此處不做限制。在本實施例中,提供了一套方案用于處理系統(tǒng)的啟動引導(dǎo),提升了環(huán)境變量存儲的可靠性,能夠應(yīng)對各種意外,甚至在環(huán)境變量被破壞后也能確保系統(tǒng)正常開機;本實施例中提供的方案包括當(dāng)出現(xiàn)可修復(fù)的錯誤時,重新寫入環(huán)境變量;增加重試機制應(yīng)對環(huán)境變量讀取錯誤;出錯時保留錯誤環(huán)境變量方便調(diào)試;利用環(huán)境變量的默認(rèn)設(shè)置確保系統(tǒng)碰到最糟糕的情況也能正常開機;考慮NAND Flash內(nèi)存壞塊而做出容量預(yù)留;針對掉電而做出雙備份保護(hù)等等;與傳統(tǒng)的環(huán)境變量簡單存放方式相比,本實施例中提供的方案可以極大地提高系統(tǒng)可靠性,使環(huán)境變量的操作能應(yīng)對各種異常情況,不容易損壞,即使萬一被損壞也不會影響系統(tǒng)的正常開機。請參閱圖3,本發(fā)明系統(tǒng)啟動引導(dǎo)處理的裝置的實施例包括第一讀取模塊301,用于從NAND Flash內(nèi)存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;第一判斷模塊302,用于判斷第一讀取模塊301讀取的環(huán)境變量是否有不可糾正錯誤;累計模塊303,當(dāng)?shù)谝慌袛嗄K302判斷出環(huán)境變量有不可糾正錯誤時,繼續(xù)讀取環(huán)境變量直至預(yù)設(shè)閾值;第二讀取模塊304,當(dāng)累計模塊303累計的不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值時,讀取該環(huán)境變量的備份變量,其中,該備份變量為第一讀取模塊301讀取的環(huán)境變量的備份;恢復(fù)模塊305,用于根據(jù)第二讀取模塊304讀取的備份變量恢復(fù)損壞的環(huán)境變量。進(jìn)一步的,本實施例中的裝置還包括第二判斷模塊306,用于當(dāng)?shù)谝慌袛嗄K302判斷出第一讀取模塊301讀取的環(huán)境變量沒有不可糾正錯誤時,再判斷第一讀取模塊301讀取的環(huán)境變量是否有可糾正錯誤;環(huán)境變量寫入模塊307,用于當(dāng)?shù)诙袛嗄K306判斷出第一讀取模塊301讀取的環(huán)境變量有可糾正錯誤時,重新寫入環(huán)境變量。進(jìn)一步的,本實施例中的裝置還包括保存模塊308,用于當(dāng)累計模塊303讀取到預(yù)定閾值的環(huán)境變量仍存在不可糾正錯誤時,保存該環(huán)境變量。進(jìn)一步的,本實施例中的裝置還包括檢查模塊309,用于檢查備份變量是否可用;第四讀取模塊310,用于當(dāng)檢查模塊309檢查出備份變量不可用時,讀取默認(rèn)環(huán)境變量。進(jìn)一步的,本實施例中的裝置還包括第一擦除模塊,用于當(dāng)對環(huán)境變量進(jìn)行更新時,擦除環(huán)境變量所在的內(nèi)存塊;第一寫入模塊,用于寫入新環(huán)境變量;第二擦除模塊,用于擦除上述環(huán)境變量的備份變量所在的內(nèi)存塊;第二寫入模塊,用于寫入新環(huán)境變量的備份變量。進(jìn)一步的,本實施例中的裝置還包括
第一檢查模塊,用于當(dāng)?shù)谝淮螌懭氕h(huán)境變量時,先檢查環(huán)境變量的備份變量所用內(nèi)存塊是否是損壞的內(nèi)存塊,如果該備份變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;備份變量寫入模塊,用于當(dāng)?shù)谝粰z查模塊檢查出備份變量所用內(nèi)存塊未損壞時, 則將該備份變量所用內(nèi)存塊擦除,并寫入備份變量;第二檢查模塊,用于檢查環(huán)境變量所用內(nèi)存塊是否是損壞的內(nèi)存塊,如果該環(huán)境變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;環(huán)境變量寫入模塊,如果當(dāng)?shù)诙z查單元檢查出環(huán)境變量所用內(nèi)存塊未損壞,則將環(huán)境變量所用內(nèi)存塊擦除,并寫入環(huán)境變量。在本實施例中,提供了一套方案用于處理系統(tǒng)的啟動引導(dǎo),提升了環(huán)境變量存儲的可靠性,能夠應(yīng)對各種意外,甚至在環(huán)境變量被破壞后也能確保系統(tǒng)正常開機;本實施例中提供的方案包括當(dāng)出現(xiàn)可修復(fù)的錯誤時,重新寫入環(huán)境變量;增加重試機制應(yīng)對環(huán)境變量讀取錯誤;出錯時保留錯誤環(huán)境變量方便調(diào)試;利用環(huán)境變量的默認(rèn)設(shè)置確保系統(tǒng)碰到最糟糕的情況也能正常開機;考慮NAND Flash內(nèi)存壞塊而做出容量預(yù)留;針對掉電而做出雙備份保護(hù)等等;與傳統(tǒng)的環(huán)境變量簡單存放方式相比,本實施例中提供的方案可以極大地提高系統(tǒng)可靠性,使環(huán)境變量的操作能應(yīng)對各種異常情況,不容易損壞,即使萬一被損壞也不會影響系統(tǒng)的正常開機。以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
權(quán)利要求
1.一種系統(tǒng)啟動引導(dǎo)處理方法,其特征在于,包括從非易失閃存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;判斷所述環(huán)境變量是否有不可糾正錯誤并累計所述不可糾正錯誤的連續(xù)累計次數(shù);如果不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值,則讀取所述環(huán)境變量的備份變量, 所述備份變量為所述環(huán)境變量的備份;以及根據(jù)所述備份變量恢復(fù)損壞的環(huán)境變量。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷所述環(huán)境變量是否有不可糾正錯誤的步驟之后還包括如果所述環(huán)境變量沒有不可糾正錯誤,則再判斷是否有可糾正錯誤;如果有可糾正錯誤,則重新將環(huán)境變量寫入至非易失閃存中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述讀取所述環(huán)境變量的備份變量的步驟之前還包括檢查所述備份變量是否可用;如果所述備份變量可用,則執(zhí)行讀取所述環(huán)境變量的備份變量的步驟。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述檢查備份變量是否可用的步驟之后還包括如果所述備份變量不可用,則讀取默認(rèn)環(huán)境變量。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于讀取所述環(huán)境變量的備份變量的步驟之前還包括步驟保存所述環(huán)境變量。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括當(dāng)對所述環(huán)境變量進(jìn)行更新時,擦除所述環(huán)境變量所在的非易失閃存中的內(nèi)存塊;將新環(huán)境變量寫入擦除的內(nèi)存塊;擦除所述環(huán)境變量的備份變量所在的非易失閃存中的內(nèi)存塊;將所述新環(huán)境變量的備份變量寫入擦除的內(nèi)存塊。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括當(dāng)將所述環(huán)境變量第一次寫入非易失閃存時,檢查所述備份變量所用內(nèi)存塊是否是損壞的內(nèi)存塊;如果所述備份變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;如果所述備份變量所用內(nèi)存塊未損壞,則將所述備份變量所用內(nèi)存塊擦除,并寫入所述備份變量;檢查所述環(huán)境變量所用內(nèi)存塊是否是損壞的內(nèi)存塊;如果所述環(huán)境變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;如果所述環(huán)境變量所用內(nèi)存塊未損壞,則將所述環(huán)境變量所用內(nèi)存塊擦除,并寫入所述環(huán)境變量。
8.一種系統(tǒng)啟動引導(dǎo)處理裝置,其特征在于,包括第一讀取模塊,用于從非易失閃存中讀取系統(tǒng)啟動引導(dǎo)用環(huán)境變量;第一判斷模塊,用于判斷所述環(huán)境變量是否有不可糾正錯誤; 累計模塊,當(dāng)所述第一判斷模塊判斷出環(huán)境變量有不可糾正錯誤時,累計所述不可糾正錯誤的連續(xù)累計次數(shù);第二讀取模塊,當(dāng)所述累計模塊累計的不可糾正錯誤的連續(xù)累計次數(shù)達(dá)到預(yù)設(shè)閾值時,讀取所述環(huán)境變量的備份變量,所述備份變量為所述環(huán)境變量的備份; 恢復(fù)模塊,用于根據(jù)第二讀取模塊讀取的備份變量恢復(fù)損壞的環(huán)境變量。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括第二判斷模塊,用于當(dāng)所述第一判斷模塊判斷出第一讀取模塊讀取的環(huán)境變量沒有不可糾正錯誤時,再判斷第一讀取模塊讀取的環(huán)境變量是否有可糾正錯誤;環(huán)境變量寫入模塊,用于當(dāng)?shù)诙袛嗄K判斷出第一讀取模塊讀取的環(huán)境變量有可糾正錯誤時,重新寫入環(huán)境變量。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括 檢查模塊,用于檢查所述備份變量是否可用;第四讀取模塊,用于當(dāng)檢查模塊檢查出所述備份變量不可用時,讀取默認(rèn)環(huán)境變量。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述裝置還包括保存模塊,用于當(dāng)?shù)诙x取模塊讀取到預(yù)定閾值的所述環(huán)境變量仍存在不可糾正錯誤時,保存所述環(huán)境變量。
12.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括第一擦除模塊,用于當(dāng)對所述環(huán)境變量進(jìn)行更新時,擦除所述環(huán)境變量所在的非易失閃存中的內(nèi)存塊;第一寫入模塊,用于將新環(huán)境變量寫入擦除的內(nèi)存塊;第二擦除模塊,用于擦除所述環(huán)境變量的備份變量所在的非易失閃存中的內(nèi)存塊; 第二寫入模塊,用于將所述新環(huán)境變量的備份變量寫入擦除的內(nèi)存塊。
13.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括第一檢查模塊,用于當(dāng)將環(huán)境變量第一次寫入非易失閃存時,檢查所述備份變量所用內(nèi)存塊是否是損壞的內(nèi)存塊,如果所述備份變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;備份變量寫入模塊,用于當(dāng)?shù)谝粰z查模塊檢查出所述備份變量所用內(nèi)存塊未損壞時, 則將所述備份變量所用內(nèi)存塊擦除,并寫入所述備份變量;第二檢查模塊,用于檢查所述環(huán)境變量所用內(nèi)存塊是否是損壞的內(nèi)存塊,如果所述環(huán)境變量所用內(nèi)存塊是損壞的內(nèi)存塊,則檢查下一個內(nèi)存塊,直至檢查到未損壞的內(nèi)存塊;環(huán)境變量寫入模塊,如果當(dāng)?shù)诙z查單元檢查出所述環(huán)境變量所用內(nèi)存塊未損壞,則將所述內(nèi)存塊擦除,并寫入所述環(huán)境變量。
全文摘要
本發(fā)明實施例公開了一種系統(tǒng)啟動引導(dǎo)處理方法,本發(fā)明實施例還提供相應(yīng)的裝置。本發(fā)明通過從非易失閃存中讀取環(huán)境變量,當(dāng)該環(huán)境變量有不可糾正錯誤時,連續(xù)讀取環(huán)境變量直至預(yù)設(shè)閾值,當(dāng)讀取的預(yù)設(shè)閾值次數(shù)的環(huán)境變量仍存在不可糾正錯誤時,讀取該環(huán)境變量的備份變量,并根據(jù)該備份變量恢復(fù)損壞的環(huán)境變量;通過上述方式,本發(fā)明能夠在確認(rèn)環(huán)境變量損壞的情況下,啟用備份變量,并使用該備份變量恢復(fù)損壞的環(huán)境變量,使系統(tǒng)能正常啟動,極大地提高了系統(tǒng)可靠性,提高了用戶體驗度。
文檔編號G06F11/14GK102298545SQ20111024273
公開日2011年12月28日 申請日期2011年8月23日 優(yōu)先權(quán)日2011年8月23日
發(fā)明者周濤 申請人:晨星半導(dǎo)體股份有限公司, 晨星軟件研發(fā)(深圳)有限公司