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