本發(fā)明涉及一種基于bmc固件的服務(wù)器計(jì)算機(jī)uefi固件的更新方法,尤其是在服務(wù)器計(jì)算機(jī)出現(xiàn)其uefi固件被徹底破壞導(dǎo)致的情形下的服務(wù)器計(jì)算機(jī)uefi固件的更新。
背景技術(shù):
統(tǒng)一可擴(kuò)展固件接口(unifiedextensiblefirmwareinterface,uefi)是由intel、amd、microsoft、ami、lenovo及hp等pc廠商為了推動(dòng)計(jì)算機(jī)發(fā)展而取代傳統(tǒng)bios的一種固件接口標(biāo)準(zhǔn)。其目的是為了提供一組在操作系統(tǒng)啟動(dòng)前在所有平臺(tái)上實(shí)現(xiàn)一致的、正確的啟動(dòng)服務(wù),被看做是有近20多年歷史的bios的繼任者。隨著uefi固件接口的發(fā)展,uefi固件在很多方面實(shí)現(xiàn)了傳統(tǒng)bios所無法比擬的優(yōu)勢(shì)及功能,如支持圖形化配置界面、支持鼠標(biāo)操作、強(qiáng)大的跨平臺(tái)特性、良好的兼容性、使用模塊化設(shè)計(jì),降低了開發(fā)和設(shè)計(jì)的難度。uefi固件的這些優(yōu)勢(shì),使其得到了快速發(fā)展,得到了更多pc、服務(wù)器及嵌入式廠商的支持,被應(yīng)用到了越來越多的領(lǐng)域中。
bios是英文"basicinputoutputsystem"的縮略詞,翻譯為中文名稱是"基本輸入輸出系統(tǒng)"。bios是一組固化到計(jì)算機(jī)內(nèi)主板上一個(gè)rom芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開機(jī)后自檢程序和系統(tǒng)自啟動(dòng)程序,它可從cmos中讀寫系統(tǒng)設(shè)置的具體信息。其主要功能是為計(jì)算機(jī)提供最底層的、最直接的硬件設(shè)置和控制。
bmc,其全稱是baseboardmanagementcontroller,是在服務(wù)器計(jì)算機(jī)平臺(tái)上特有的硬件模塊,該模塊的主要功能是實(shí)時(shí)監(jiān)控服務(wù)器計(jì)算機(jī)的各個(gè)硬件設(shè)備的狀態(tài),如中央處理器的溫度,硬盤和內(nèi)存等外部設(shè)備的信息。該模塊也有其自己的固件系統(tǒng),該系統(tǒng)獨(dú)立于系統(tǒng)uefi固件之外,在服務(wù)器計(jì)算機(jī)主板接入外接電源而沒有開始啟動(dòng)時(shí),該系統(tǒng)便能夠開始運(yùn)行并能夠接受外部指令,如令服務(wù)器主板開機(jī)、關(guān)機(jī)以及獲取系統(tǒng)uefi固件內(nèi)容等工作。
uefi固件更新,是指由于當(dāng)前計(jì)算機(jī)中存儲(chǔ)在eeprom芯片中的uefi固件存在缺陷或者功能缺失等原因,故將由計(jì)算機(jī)廠商發(fā)布的新版本的固件通過軟件更新或者硬件燒錄器寫入eeprom芯片的過程。當(dāng)服務(wù)器計(jì)算機(jī)主板在提供給最終客戶以后,就通常不再具備硬件燒錄器燒寫eeprom的環(huán)境,因此在這樣的條件下,通過軟件的方式確保服務(wù)器計(jì)算機(jī)uefi固件能夠被更新就變得異常迫切。一般情況下的軟件更新方式需要確保存儲(chǔ)在eeprom芯片中的uefi固件的sec和pei模塊需要是完整的,才能保證軟件更新功能可以正常進(jìn)行,但是當(dāng)存儲(chǔ)在eeprom芯片中的sec及pei模塊由于某種原因無法正常執(zhí)行時(shí),軟件更新方法便失去了功能。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:針對(duì)現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供一種基于bmc更新及備份系統(tǒng)uefi固件的設(shè)備和方法,利用bmc存儲(chǔ)介質(zhì)(如eeprom)中存儲(chǔ)的sec及pei模塊來實(shí)現(xiàn)對(duì)系統(tǒng)uefi固件的更新。
技術(shù)方案:一種基于bmc更新及備份系統(tǒng)uefi固件的設(shè)備,包括:
bmc存儲(chǔ)介質(zhì),用于保存系統(tǒng)uefi固件的sec及pei階段的可執(zhí)行代碼;
bmc應(yīng)用模塊,用于檢查uefi固件是否正常啟動(dòng)及恢復(fù)和備份系統(tǒng)uefi固件的sec及pei模塊;
(1)檢查是否在規(guī)定時(shí)間內(nèi)收到了系統(tǒng)uefi固件完成啟動(dòng)的標(biāo)志;
如果沒收到啟動(dòng)完成標(biāo)志,檢查sec及pei模塊寫入標(biāo)志是否被設(shè)置,
如是,則向服務(wù)器主板發(fā)送重啟命令,服務(wù)器主板收到重啟命令并重新啟動(dòng),中央處理器開始執(zhí)行存儲(chǔ)在eeprom中的sec及pei階段的代碼,中央處理器執(zhí)行完sec及pei階段代碼后,檢查是否需要進(jìn)行uefi固件更新,
如否,系統(tǒng)uefi固件完成啟動(dòng),向bmc發(fā)送啟動(dòng)完成標(biāo)志,bmc設(shè)置系統(tǒng)uefi固件啟動(dòng)完成標(biāo)志;如是,調(diào)用uefi固件更新模塊查找是否存目標(biāo)uefi固件;如是,則進(jìn)行uefi固件更新工作,完成sec及pei等其他所有模塊的更新工作并觸發(fā)重啟命令,如否,將需要更新的目標(biāo)uefi固件拷貝到需要更新的服務(wù)器計(jì)算機(jī);
(2)如sec及pei模塊寫入標(biāo)志沒被設(shè)置,則觸發(fā)uefi固件恢復(fù)標(biāo)志,將存儲(chǔ)在bmc存儲(chǔ)介質(zhì)中的sec及pei模塊寫入系統(tǒng)uefi固件存儲(chǔ)芯片的對(duì)應(yīng)區(qū)域中,并設(shè)置sec及pei模塊寫入完成標(biāo)志;
uefi固件更新模塊,實(shí)現(xiàn)對(duì)系統(tǒng)uefi固件的更新及確認(rèn)工作。
所述服務(wù)器計(jì)算機(jī)系統(tǒng)的bmc存儲(chǔ)介質(zhì)包括:
一種具有bmc固件模塊的服務(wù)器計(jì)算機(jī);
bmc模塊需要被獨(dú)立存儲(chǔ)在存儲(chǔ)介質(zhì)中,通常是spi接口的eeprom芯片;
將系統(tǒng)uefi固件的sec及pei階段的可執(zhí)行代碼存儲(chǔ)在該eeprom芯片中。
所述bmc應(yīng)用模塊包括:
系統(tǒng)uefi固件的sec及pei恢復(fù)模塊;
系統(tǒng)uefi固件的sec及pei備份模塊。
所述uefi固件更新模塊包括:
dxe階段代碼;
bds階段代碼;
pcd管理模塊;
固件文件系統(tǒng)卷服務(wù)模塊;
簡單文本輸出模塊;
unicode字符支持模塊;
fat文件系統(tǒng)模塊。
一種基于bmc更新及備份系統(tǒng)uefi固件的方法,具體步驟如下:
步驟1,將需要更新的目標(biāo)uefi固件拷貝到需要更新的服務(wù)器計(jì)算機(jī);
步驟2,啟動(dòng)服務(wù)器計(jì)算機(jī),然后檢查bmc應(yīng)用模塊是否在規(guī)定時(shí)間內(nèi)收到了系統(tǒng)uefi固件完成啟動(dòng)的標(biāo)志,如果收到啟動(dòng)完成標(biāo)志,則跳轉(zhuǎn)到步驟10;否則進(jìn)入步驟3;
步驟3,檢查sec及pei模塊寫入標(biāo)志是否被設(shè)置,如否,則進(jìn)入步驟4;如是,則觸發(fā)uefi固件恢復(fù)標(biāo)志,調(diào)用bmc應(yīng)用模塊,將存儲(chǔ)在bmc存儲(chǔ)介質(zhì)中的sec及pei模塊寫入系統(tǒng)uefi固件存儲(chǔ)芯片的對(duì)應(yīng)區(qū)域中,并設(shè)置sec及pei模塊的寫入完成標(biāo)志;
步驟4,bmc向服務(wù)器主板發(fā)送重啟命令;
步驟5,服務(wù)器主板收到重啟命令并重新啟動(dòng),中央處理器開始執(zhí)行存儲(chǔ)在eeprom中的sec及pei階段的代碼;
步驟6,中央處理器執(zhí)行完sec及pei階段代碼后,檢查是否需要進(jìn)行uefi固件更新,如否,進(jìn)入步驟9;如是,進(jìn)入步驟7;
步驟7,調(diào)用uefi固件更新模塊查找是否存在步驟1中的目標(biāo)uefi固件;如否,則進(jìn)入步驟8;如否,則回到步驟1。
步驟8,進(jìn)行uefi固件更新工作,完成sec及pei等其他所有模塊的更新工作并觸發(fā)重啟命令,進(jìn)入步驟9。
步驟9,系統(tǒng)uefi固件完成啟動(dòng),向bmc發(fā)送啟動(dòng)完成標(biāo)志,bmc設(shè)置系統(tǒng)uefi固件啟動(dòng)完成標(biāo)志。
步驟10,結(jié)束。
附圖說明
圖1是系統(tǒng)uefi固件布局示意圖;
圖2是bmc固件布局示意圖;
圖3是本發(fā)明利用bmc固件恢復(fù)系統(tǒng)uefi固件的原理框圖;
圖4是本發(fā)明方法的流程圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
基于bmc更新及備份系統(tǒng)uefi固件的設(shè)備,包括:
bmc存儲(chǔ)介質(zhì),用于保存系統(tǒng)uefi固件的sec及pei階段的可執(zhí)行代碼;
bmc應(yīng)用模塊,用于檢查uefi固件是否正常啟動(dòng)及恢復(fù)和備份系統(tǒng)uefi固件的sec及pei模塊;
(1)檢查是否在規(guī)定時(shí)間內(nèi)收到了系統(tǒng)uefi固件完成啟動(dòng)的標(biāo)志;
如果沒收到啟動(dòng)完成標(biāo)志,檢查sec及pei模塊寫入標(biāo)志是否被設(shè)置,
如是,則向服務(wù)器主板發(fā)送重啟命令,服務(wù)器主板收到重啟命令并重新啟動(dòng),中央處理器開始執(zhí)行存儲(chǔ)在eeprom中的sec及pei階段的代碼,中央處理器執(zhí)行完sec及pei階段代碼后,檢查是否需要進(jìn)行uefi固件更新,
如否,系統(tǒng)uefi固件完成啟動(dòng),向bmc發(fā)送啟動(dòng)完成標(biāo)志,bmc設(shè)置系統(tǒng)uefi固件啟動(dòng)完成標(biāo)志;如是,調(diào)用uefi固件更新模塊查找是否存目標(biāo)uefi固件;如是,則進(jìn)行uefi固件更新工作,完成sec及pei等其他所有模塊的更新工作并觸發(fā)重啟命令,如否,將需要更新的目標(biāo)uefi固件拷貝到需要更新的服務(wù)器計(jì)算機(jī);
(2)如sec及pei模塊寫入標(biāo)志沒被設(shè)置,則觸發(fā)uefi固件恢復(fù)標(biāo)志,將存儲(chǔ)在bmc存儲(chǔ)介質(zhì)中的sec及pei模塊寫入系統(tǒng)uefi固件存儲(chǔ)芯片的對(duì)應(yīng)區(qū)域中,并設(shè)置sec及pei模塊寫入完成標(biāo)志;
uefi固件更新模塊,實(shí)現(xiàn)對(duì)系統(tǒng)uefi固件的更新及確認(rèn)工作。
服務(wù)器計(jì)算機(jī)系統(tǒng)的bmc存儲(chǔ)介質(zhì)包括:
具有bmc固件模塊的服務(wù)器計(jì)算機(jī);
bmc模塊需要被獨(dú)立存儲(chǔ)在存儲(chǔ)介質(zhì)中,通常是spi接口的eeprom芯片;
將系統(tǒng)uefi固件的sec及pei階段的可執(zhí)行代碼存儲(chǔ)在該eeprom芯片中。
bmc應(yīng)用模塊包括:
系統(tǒng)uefi固件的sec及pei恢復(fù)模塊;
系統(tǒng)uefi固件的sec及pei備份模塊。
uefi固件更新模塊包括:
dxe階段代碼;
bds階段代碼;
pcd管理模塊;
固件文件系統(tǒng)卷服務(wù)模塊;
簡單文本輸出模塊;
unicode字符支持模塊;
fat文件系統(tǒng)模塊。
圖1和圖2均表示固件布局的簡略示意圖,其中圖1表示系統(tǒng)固件在存儲(chǔ)芯片上的存儲(chǔ)布局;圖2表示bmc固件在存儲(chǔ)芯片上的存儲(chǔ)布局;
sec模塊作用:完成cpu模式切換,從16位保護(hù)模式切換到實(shí)模式,利用cpu的緩存建立程序調(diào)用的堆棧環(huán)境,當(dāng)前述工作完成后,通過函數(shù)調(diào)用的方式跳轉(zhuǎn)到pei模塊的起始代碼開始執(zhí)行;
pei模塊作用:完成cpu及芯片組(通常是pch橋)的最基本初始化,完成平臺(tái)的內(nèi)存初始化,當(dāng)前述工作完成后,pei模塊會(huì)將系統(tǒng)uefi固件從存儲(chǔ)芯片(通常是eeprom芯片)復(fù)制到內(nèi)存,然后將內(nèi)存中的系統(tǒng)uefi固件解壓縮并跳轉(zhuǎn)到mainfv模塊;
mainfv模塊:對(duì)cpu、芯片組以及各種外部設(shè)備進(jìn)行初始化,準(zhǔn)備操作系統(tǒng)安裝、啟動(dòng)環(huán)境。
bmc應(yīng)用模塊:負(fù)責(zé)將存在bmc存儲(chǔ)芯片中的sec和pei模塊寫入存儲(chǔ)系統(tǒng)uefi固件的存儲(chǔ)芯片中;
pch橋:全稱是platformcontrollerhub,通常用來連接各種外部設(shè)備,如鍵盤,鼠標(biāo),硬盤、光驅(qū)和網(wǎng)卡等;
lpc總線:全稱是lowpincount;是intel發(fā)布的取代傳統(tǒng)isabus的一種新接口規(guī)范,用來連接低速設(shè)備和pch橋.
spi總線:全稱是serialperipheralinterface,是bios存儲(chǔ)芯片與pch橋之間的連接接口;
usb總線:全稱是universalserialbus,是由intel等多家公司提出的一種計(jì)算機(jī)外部接口標(biāo)準(zhǔn);
pcie總線:全稱是peripheralcomponentinterconnectexpress,是一種點(diǎn)對(duì)點(diǎn)串行連接的設(shè)備連接方式,pciexpress是新一代的總線接口。
如圖4所示,基于bmc更新及備份系統(tǒng)uefi固件的方法,具體步驟如下:
步驟1,將需要更新的目標(biāo)uefi固件拷貝到需要更新的服務(wù)器計(jì)算機(jī);
步驟2,啟動(dòng)服務(wù)器計(jì)算機(jī),然后檢查bmc應(yīng)用模塊是否在規(guī)定時(shí)間內(nèi)收到了系統(tǒng)uefi固件完成啟動(dòng)的標(biāo)志,如果收到啟動(dòng)完成標(biāo)志,則跳轉(zhuǎn)到步驟10;否則進(jìn)入步驟3;
步驟3,檢查sec及pei模塊寫入標(biāo)志是否被設(shè)置,如否,則進(jìn)入步驟4;如是,則觸發(fā)uefi固件恢復(fù)標(biāo)志,調(diào)用bmc應(yīng)用模塊,將存儲(chǔ)在bmc存儲(chǔ)介質(zhì)中的sec及pei模塊寫入系統(tǒng)uefi固件存儲(chǔ)芯片的對(duì)應(yīng)區(qū)域中,并設(shè)置sec及pei模塊的寫入完成標(biāo)志;
步驟4,bmc向服務(wù)器主板發(fā)送重啟命令;
步驟5,服務(wù)器主板收到重啟命令并重新啟動(dòng),中央處理器開始執(zhí)行存儲(chǔ)在eeprom中的sec及pei階段的代碼;
步驟6,中央處理器執(zhí)行完sec及pei階段代碼后,檢查是否需要進(jìn)行uefi固件更新,如否,進(jìn)入步驟9;如是,進(jìn)入步驟7;
步驟7,調(diào)用uefi固件更新模塊查找是否存在步驟1中的目標(biāo)uefi固件;如是,則進(jìn)入步驟8;如否,則回到步驟1。
步驟8,進(jìn)行uefi固件更新工作,完成sec及pei等其他所有模塊的更新工作并觸發(fā)重啟命令,進(jìn)入步驟9。
步驟9,系統(tǒng)uefi固件完成啟動(dòng),向bmc發(fā)送啟動(dòng)完成標(biāo)志,bmc設(shè)置系統(tǒng)uefi固件啟動(dòng)完成標(biāo)志。
步驟10,結(jié)束。