一種bios固件的劃分、更新方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種B1S (Basic Input Output System,基本輸入輸出系統(tǒng))的更新方法,特別是涉及一種無硬件介入的B1S固件(Firmware)的劃分、更新方法和系統(tǒng)。
【背景技術(shù)】
[0002]在UEFI (Unified Extensible Firmware Interface,通用擴(kuò)展固件接口)B1S 架構(gòu)中,B1S 固件通常被分為 Boot-Block(SEC+PEI)、FvMain(DXE+BDS)和NVRAM (Non-Vo I at i I e Random Access Memory,非易失性隨機(jī)訪問存儲器)等區(qū)塊,如圖1所示。其中,SEC(Security Phase,UEFI B1S的啟動階段)用于計算機(jī)最早的啟動階段,此段時間很短,代碼大約是上千行左右;PEI (Pre-EFI Initializat1n, UEFI B1S運(yùn)行中的第二階段)是預(yù)可擴(kuò)展固件接口初始化階段,該階段CPU工作在保護(hù)模式32位狀態(tài),啟動并初始化內(nèi)存控制器,完成一些最基本的硬件芯片初始化工作;DXE(Driver Execut1nEnvironment,UEFI B1S運(yùn)行中的第三階段)是驅(qū)動執(zhí)行環(huán)境階段,該階段CPU工作模式轉(zhuǎn)為64位保護(hù)模式中的長模式,B1S裝載所有的硬件芯片驅(qū)動程序,完成所有硬件的初始化動作;BDS(Boot Device Select1n,啟動設(shè)備選擇階段):當(dāng)UEFI B1S運(yùn)行到此階段時,意味著將根據(jù)B1S預(yù)先設(shè)定好的啟動順序,開始啟動操作系統(tǒng)。
[0003]Boot-Block是B1S中一段特定的區(qū)塊,包含有用于引導(dǎo)的最小指令集,正常的B1S升級操作不能消除這段信息。當(dāng)B1S資料被破壞時,B1S會啟動到恢復(fù)模式。恢復(fù)模式的原理是:提前將SEC及PEI放到B1S的Boot-Block部份,且這部份代碼必須確保完好無誤,沒有受到任何破壞。在當(dāng)B1S中除了 Boot-Block以外部分被破壞時,B1S會順序執(zhí)行在Boot-Block部分中的SEC和PEI,完成內(nèi)存的初始化,然后從U盤或光盤等外部存儲設(shè)備上尋找B1S的DXE,查找DXE成功后,即可執(zhí)行上面的DXE及BDS (DXE及BDS實際上放在一個文件當(dāng)中,找到DXE,也就找到了 BDS),并自動重新更新B1S固件中被破壞的部分。因而Boot-Block可以有效低恢復(fù)B1S資料因意外事件而造成的破壞。
[0004]由于PEI中包含有很多和系統(tǒng)硬件相關(guān)的初始化程序,在實際開發(fā)和使用中,依然存在不定期更新PEI的需要。在現(xiàn)有Intel平臺上,B1S固件在進(jìn)行更新時,為了保證Boot-Block區(qū)域的安全更新,引入了特定的硬件支持。此硬件支持可以保證即使此特殊區(qū)域在B1S固件更新過程中遇到意外事件(如斷電)發(fā)生時依然能夠保證數(shù)據(jù)完整性,系統(tǒng)在下一次的啟動中依然具有自我恢復(fù)更新能力,從而避免因意外事件導(dǎo)致的B1S固件破壞而無法完成系統(tǒng)啟動。
[0005]但是,由于此種方法依賴于特定的硬件設(shè)計,在非Intel平臺或者一些特殊的Intel平臺上無法實現(xiàn),降低了 B1S固件更新時的安全性,因而具有一定的局限性。而為了在無特殊硬件支持的平臺上實現(xiàn)B1S固件的安全更新,又不得不加入另一個B1S ROM做備份,這樣勢必加劇更新的成本。
【發(fā)明內(nèi)容】
[0006]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種B1S固件的劃分、更新方法和系統(tǒng),用于解決現(xiàn)有技術(shù)中在無硬件支持的情況下,且在非Intel平臺或一些特殊的Intel平臺上,B1S固件無法進(jìn)行安全更新的問題。
[0007]為實現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種B1S固件的劃分方法,將B1S固件內(nèi)的Boot-Block區(qū)塊分解為獨立的SEC區(qū)塊和獨立的PEI區(qū)塊,并增加第一地址區(qū)塊和第二地址區(qū)塊;其中,所述第一地址區(qū)塊用于保存所述PEI區(qū)塊的程序入口地址,所述第二地址區(qū)塊用于保存B1S固件在更新過程中使用的臨時備份區(qū)塊的程序入口地址。
[0008]可選地,根據(jù)權(quán)利要求書I所述的B1S固件劃分方法,其特征在于:所述第一地址區(qū)塊和所述第二地址區(qū)塊的大小為B1S存儲芯片的最小擦除扇區(qū)大小。
[0009]可選地,所述SEC區(qū)塊根據(jù)所述第一地址區(qū)塊內(nèi)存放的數(shù)據(jù)跳轉(zhuǎn)至所述PEI區(qū)塊;所述SEC區(qū)塊根據(jù)所述第二地址區(qū)塊內(nèi)存放的數(shù)據(jù)跳轉(zhuǎn)至所述臨時備份區(qū)塊。
[0010]可選地,所述SEC區(qū)塊還用于檢測B1S固件是否進(jìn)入恢復(fù)模式:檢查所述第二地址區(qū)塊內(nèi)保存的數(shù)據(jù)是否完整有效:若有效,則根據(jù)所述第二地址區(qū)塊內(nèi)保存的數(shù)據(jù)跳轉(zhuǎn)至所述臨時備份區(qū)塊,進(jìn)入恢復(fù)模式;若無效,則讀取所述第一地址區(qū)塊內(nèi)數(shù)據(jù),并根據(jù)所述第一地址區(qū)塊內(nèi)保存的數(shù)據(jù)跳轉(zhuǎn)至所述PEI區(qū)塊,進(jìn)入常規(guī)啟動模式。
[0011]—種B1S固件的更新方法,所述B1S固件按照如權(quán)利要求1所述的劃分方法進(jìn)行劃分,所述B1S固件的安全更新方法,包括:步驟S11,備份所述PEI區(qū)塊的數(shù)據(jù)至所述臨時備份區(qū)塊內(nèi),并將所述臨時備份區(qū)塊的程序入口地址寫入所述第二地址區(qū)塊內(nèi);步驟S12,擦除所述PEI區(qū)塊內(nèi)的數(shù)據(jù),寫入待更新數(shù)據(jù),并將更新后的所述PEI區(qū)塊的程序入口地址寫入所述第一地址區(qū)塊內(nèi);步驟S13,檢查所述第一地址區(qū)塊內(nèi)的數(shù)據(jù)是否完整有效:如果有效,則跳轉(zhuǎn)至步驟S14 ;如果無效,那么此次更新結(jié)束;并且在B1S固件下次啟動時,所述SEC區(qū)塊直接根據(jù)所述第二地址區(qū)塊內(nèi)保存的數(shù)據(jù)跳轉(zhuǎn)至所述臨時備份區(qū)塊,進(jìn)入恢復(fù)模式;步驟S14,先擦除所述第二地址區(qū)塊內(nèi)的數(shù)據(jù),再擦除所述臨時備份區(qū)塊內(nèi)的數(shù)據(jù);步驟S15,更新除所述SEC區(qū)塊、所述第一地址區(qū)塊、所述第二地址子區(qū)和所述PEI區(qū)塊外的其他待更新的區(qū)塊。
[0012]可選地,所述臨時備份區(qū)塊是在B1S固件進(jìn)行更新前臨時劃分出來的,其位于B1S固件內(nèi)除所述SEC區(qū)塊、所述第一地址區(qū)塊、所述第二地址區(qū)塊和所述PEI區(qū)塊外的其他區(qū)塊內(nèi)。
[0013]可選地,所述步驟S13中還包括:在檢查到所述第一地址區(qū)塊內(nèi)保存的數(shù)據(jù)無效時,設(shè)置跳轉(zhuǎn)次數(shù),重新跳轉(zhuǎn)至所述步驟S12進(jìn)行所述PEI區(qū)塊和第一地址區(qū)塊的數(shù)據(jù)更新;并且當(dāng)經(jīng)過所述跳轉(zhuǎn)次數(shù)的所述步驟S12的操作,所述第一地址區(qū)塊內(nèi)保存的數(shù)據(jù)仍然無效,則更新結(jié)束。
[0014]可選地,在所述臨時備份區(qū)塊的數(shù)據(jù)被擦除后,所述臨時備份區(qū)塊被取消,B1S固件內(nèi)不再存在所述臨時備份區(qū)塊。
[0015]一種B1S固件的更新系統(tǒng),所述B1S固件的安全更新系統(tǒng)包括劃分模塊、備份模塊、地址寫入模塊和更新模塊;其中,所述劃分區(qū)塊用于將所述B1S固件劃分為SEC區(qū)塊和獨立的PEI區(qū)塊,并增加第一地址區(qū)塊和第二地址區(qū)塊;所述備份模塊用于將所述PEI區(qū)塊內(nèi)的數(shù)據(jù)備份至臨時備份區(qū)塊;所述地址寫入模塊用于將所述臨時備份區(qū)塊的程序入口地址寫入所述第二地址區(qū)塊,并將更新后的所述PEI區(qū)塊的程序入口地址寫入所述第一地址區(qū)塊;所述更新模塊用于更新所述B1S固件,包括更新所述PEI區(qū)塊的數(shù)據(jù)。
[0016]可選地,所述B1S固件的更新系統(tǒng)還包括擦除模塊;所述擦除模塊用于擦除所述PEI區(qū)塊內(nèi)的數(shù)據(jù),并在所述更新模塊更新所述B1S固件成功時,擦除所述第二地址區(qū)塊和所述臨時備份區(qū)塊內(nèi)保存的數(shù)據(jù),取消所述臨時備份區(qū)塊。
[0017]如上所述,本發(fā)明的一種B1S固件的劃分、更新方法和系統(tǒng),將B1S固件內(nèi)的Boot-Block區(qū)塊分解為獨立的SEC區(qū)塊和獨立的PEI區(qū)塊,并增加第一地址區(qū)塊和第二地址區(qū)塊,在此基礎(chǔ)上,利用軟件的設(shè)計方法,將原有PEI區(qū)塊的數(shù)據(jù)在B1S固件除SEC區(qū)塊、PEI區(qū)塊、第一地址區(qū)塊和第二地址區(qū)塊之外的待更新的空閑區(qū)塊內(nèi)進(jìn)行數(shù)據(jù)備份,并保存相應(yīng)的備份數(shù)據(jù)的程序入口地址,以及更新數(shù)據(jù)的程序入口地址。這樣,在PEI區(qū)塊更新過程中,即使因意外事件(如斷電)而導(dǎo)致PEI區(qū)塊數(shù)據(jù)破壞時,在再次啟動B1S固件后,SEC區(qū)塊依然可以通過第二地址區(qū)塊內(nèi)的程序入口地址進(jìn)入備份區(qū)域并啟動恢復(fù)模式程序,以保證B1S固件更新遇到故障時的安全恢復(fù)。本發(fā)明的B1S固件的劃分、更新方法和系統(tǒng)不依賴于特定的硬件支持;不再局限于現(xiàn)有的Intel平臺,在一些存儲設(shè)備、通信設(shè)備和服務(wù)器都可實現(xiàn)B1S固件的安全更新,適用范圍更加廣泛,實現(xiàn)更加簡單和安全;相較于現(xiàn)有技術(shù),本發(fā)明的B1S固件的劃分、更新方法和系統(tǒng)在無特定硬件支持的平臺上即可完成;且數(shù)據(jù)的備份區(qū)塊為非專屬區(qū)塊,其復(fù)用了其他功能區(qū)塊的存儲空間,不再額外占用B1S固件的存儲空間,并在PEI區(qū)塊更新后,臨時備份區(qū)塊即被釋放給其他功能區(qū)塊使用,而新增加的第一地址區(qū)塊和第二地址區(qū)塊僅占用B1S固件存儲芯片的最小擦除扇區(qū)大小(通常為幾個KB)的空間,因此,本發(fā)明在幾乎不增加B1S芯片大小的情況下即可實現(xiàn)B1S固件的安全更新,在實際生產(chǎn)中可有效地節(jié)約成本,具有一定的經(jīng)濟(jì)意義。
【附圖說明】
[0018]圖1顯示為現(xiàn)有技術(shù)中Uefi B1S架構(gòu)的結(jié)構(gòu)示意圖。
[0019]圖2顯示為本發(fā)明實施例公開的一種B1S固件的更新方法的流程示意圖。
[0020