本公開涉及一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法和一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng)。
背景技術(shù):
基本輸入輸出系統(tǒng)(basicinputoutputsystem,簡(jiǎn)稱為bios)是一組固化到計(jì)算機(jī)內(nèi)主板上的只讀存儲(chǔ)器(read-onlymemory,簡(jiǎn)稱為rom)芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開機(jī)自檢程序和系統(tǒng)自啟動(dòng)程序等。bios作為連接軟件程序與硬件設(shè)備的橋梁,一旦出錯(cuò)很容易導(dǎo)致計(jì)算機(jī)無法開機(jī)。
技術(shù)實(shí)現(xiàn)要素:
本公開的一個(gè)方面提供了一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法,計(jì)算機(jī)包括基本輸入輸出系統(tǒng)bios,該方法包括:對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果;根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整;以及若該程序代碼不完整,則對(duì)該存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。
可選地,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果,包括對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果,其中,目標(biāo)區(qū)域用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼中的開機(jī)初始化程序代碼;以及根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整,包括根據(jù)得到的讀取結(jié)果,判斷開機(jī)初始化程序代碼是否完整。
可選地,在對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作之前,還包括判斷bios啟動(dòng)是否異常,其中,在bios啟動(dòng)異常時(shí),對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作。
可選地,判斷bios啟動(dòng)是否異常包括判斷bios是否在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),若bios在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),則確定bios啟動(dòng)無異常,否則,確定bios啟動(dòng)異常。
可選地,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)包括:關(guān)閉bios;以及通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,或者通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼中的缺失部分進(jìn)行寫入操作。
可選地,該系統(tǒng)修復(fù)方法由基板管理控制器執(zhí)行。
本公開的另一個(gè)方面提供了一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng),其中計(jì)算機(jī)包括基本輸入輸出系統(tǒng)bios,系統(tǒng)修復(fù)系統(tǒng)包括:讀取模塊,用于對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果;第一判斷模塊,用于根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整;以及修復(fù)模塊,用于在程序代碼不完整時(shí),對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。
可選地,讀取模塊,還用于對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果,其中,目標(biāo)區(qū)域用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼中的開機(jī)初始化程序代碼;以及第一判斷模塊,還用于根據(jù)得到的讀取結(jié)果,判斷開機(jī)初始化程序代碼是否完整。
可選地,該系統(tǒng)修復(fù)系統(tǒng)還包括第二判斷模塊,其中:第二判斷模塊,用于在對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作之前,判斷bios啟動(dòng)是否異常;以及讀取模塊,還用于在bios啟動(dòng)異常時(shí),對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作。
可選地,第二判斷模塊還用于判斷bios是否在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),若bios在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),則確定bios啟動(dòng)無異常,否則,確定bios啟動(dòng)異常。
可選地,修復(fù)模塊包括:關(guān)閉單元,用于關(guān)閉bios;以及寫入單元,用于通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,或者寫入單元,用于通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼中的缺失部分進(jìn)行寫入操作。
可選地,該系統(tǒng)修復(fù)系統(tǒng)包括基板管理控制器。
本公開的另一方面提供了一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng),該系統(tǒng)包括一個(gè)或多個(gè)存儲(chǔ)器,用于存儲(chǔ)可執(zhí)行指令;以及一個(gè)或多個(gè)處理器,用于執(zhí)行所述可執(zhí)行指令,以實(shí)現(xiàn)如上述的系統(tǒng)修復(fù)方法。
本公開的另一方面提供了一種非易失性存儲(chǔ)介質(zhì),用于存儲(chǔ)上述的系統(tǒng)修復(fù)方法的程序代碼。
附圖說明
為了更完整地理解本公開及其優(yōu)勢(shì),現(xiàn)在將參考結(jié)合附圖的以下描述,其中:
圖1a和圖1b示意性示出了根據(jù)本公開實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法的應(yīng)用場(chǎng)景;
圖2示意性示出了根據(jù)本公開實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法的流程圖;
圖3示意性示出了根據(jù)本公開實(shí)施例的對(duì)程序代碼進(jìn)行修復(fù)操作的流程圖;
圖4示意性示出了根據(jù)本公開實(shí)施例的判斷bios啟動(dòng)是否異常操作的流程圖;
圖5示意性示出了根據(jù)本公開實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng)的框圖;以及
圖6示意性示出了根據(jù)本公開的另一實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng)的框圖。
具體實(shí)施方式
根據(jù)結(jié)合附圖對(duì)本公開示例性實(shí)施例的以下詳細(xì)描述,本公開的其它方面、優(yōu)勢(shì)和突出特征對(duì)于本領(lǐng)域技術(shù)人員將變得顯而易見。
在本公開中,術(shù)語(yǔ)“包括”和“含有”及其派生詞意為包括而非限制;術(shù)語(yǔ)“或”是包含性的,意為和/或。
在本說明書中,下述用于描述本公開原理的各種實(shí)施例只是說明,不應(yīng)該以任何方式解釋為限制公開的范圍。參照附圖的下述描述用于幫助全面理解由權(quán)利要求及其等同物限定的本公開的示例性實(shí)施例。下述描述包括多種具體細(xì)節(jié)來幫助理解,但這些細(xì)節(jié)應(yīng)認(rèn)為僅僅是示例性的。因此,本領(lǐng)域普通技術(shù)人員應(yīng)認(rèn)識(shí)到,在不背離本公開的范圍和精神的情況下,可以對(duì)本文中描述的實(shí)施例進(jìn)行多種改變和修改。此外,為了清楚和簡(jiǎn)潔起見,省略了公知功能和結(jié)構(gòu)的描述。此外,貫穿附圖,相同參考數(shù)字用于相似功能和操作。
bootblock是bios中一塊特定的存儲(chǔ)區(qū)域,用于存儲(chǔ)bios系統(tǒng)中最重要的啟動(dòng)信息,一旦bios損壞,如果bootblock區(qū)域完整,則bios可以進(jìn)行自動(dòng)修復(fù)。
在相關(guān)技術(shù)中,在基板管理控制器(baseboardmanagementcontroller,簡(jiǎn)稱為bmc)中設(shè)置看門狗(watchdog),如果bios在規(guī)定時(shí)間內(nèi)啟動(dòng)完成,則看門狗不會(huì)超時(shí)提醒,如果看門狗超時(shí)提醒3次,則bmc刷新bios中的程序代碼。
發(fā)明人發(fā)現(xiàn),上述方法判斷條件不準(zhǔn)確,如果bios的程序代碼完整,但是由于硬件損壞,依然會(huì)導(dǎo)致bios無法正常啟動(dòng),從而引起看門狗超時(shí)提醒,進(jìn)而導(dǎo)致bios被誤刷。
本公開的實(shí)施例提供了一種用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法,其中,計(jì)算機(jī)包括bios,該方法包括:對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果;根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整;以及若程序代碼不完整,則對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。
圖1a和圖1b示意性示出了根據(jù)本公開的實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法的應(yīng)用場(chǎng)景。
如圖1a所示,在統(tǒng)一可擴(kuò)展固件接口(unifiedextensiblefirmwareinterface,簡(jiǎn)稱為uefi)架構(gòu)中,bios的啟動(dòng)包括四個(gè)階段:安全性階段(security階段,簡(jiǎn)稱sec階段)s110、efi前初始化階段(preefiinitialization,簡(jiǎn)稱pei階段)s120、驅(qū)動(dòng)程序執(zhí)行環(huán)境階段(driverexecutionenvironment,簡(jiǎn)稱dxe階段)s130以及開機(jī)設(shè)備選擇階段開機(jī)設(shè)備選擇階段(bootdevselect,簡(jiǎn)稱bds階段)s140。
sec階段s110是平臺(tái)初始化的第一個(gè)階段,計(jì)算機(jī)系統(tǒng)加電或重啟后進(jìn)入這個(gè)階段。計(jì)算機(jī)在這個(gè)階段包括創(chuàng)建一個(gè)臨時(shí)的記憶體,在主記憶體被初始化之前來預(yù)先驗(yàn)證cpu、芯片組以及主機(jī)板,并且傳遞握手信息給pei階段。
pei階段s120是,用以喚醒cpu以及一部分記憶體的初始化階段。同時(shí),芯片組和主機(jī)板也開始初始化。在pei階段結(jié)束時(shí),核心的芯片組(例如,cpu,pch,內(nèi)存等)已經(jīng)初始化完成。此時(shí)bios已經(jīng)有能力檢查biosrom本身是否完整,是否要進(jìn)入自我修復(fù)。
在dxe階段s130,驅(qū)動(dòng)程序執(zhí)行環(huán)境階段。dxe階段的主要功能在于溝通efi驅(qū)動(dòng)程序以及硬件。即,該階段內(nèi)所有的記憶體、外設(shè)部件互連標(biāo)準(zhǔn)(peripheralcomponentinterconnect,簡(jiǎn)稱pci)、通用串行總線(universalserialbus,簡(jiǎn)稱usb)、串行高級(jí)技術(shù)附件(serialadvancedtechnologyattachment,簡(jiǎn)稱sata)等都完成初始化,并且完成驅(qū)動(dòng)程序的加載。
在dbs階段s140使用者可以在開機(jī)管理者程式頁(yè)面選擇從哪個(gè)偵測(cè)到的開機(jī)設(shè)備來啟動(dòng)。
如圖1b所示,在統(tǒng)一的可擴(kuò)展固件接口(unifiedextensiblefirmwareinterface,簡(jiǎn)稱uefi)架構(gòu)下,bios的程序代碼以文件的形式存儲(chǔ)在biosrom100中,biosrom100包括fv_bb110、fv_main120以及fv_nvram130等幾個(gè)區(qū)域。fv_bb為bootblock存儲(chǔ)區(qū)域,包含有用于引導(dǎo)的最小指令集,存放著開機(jī)初始化時(shí)所需要的代碼(即上述sec階段以及pei階段的代碼),并為接下來執(zhí)行fv_main中的代碼而做好準(zhǔn)備工作。
fv_bb存儲(chǔ)區(qū)域中的代碼可以檢測(cè)bios是否需要自我修復(fù),并且可以通過讀取biosimage來實(shí)現(xiàn)bios的自我修復(fù)。因此,即使biosrom遭到破壞,只要fv_bb存儲(chǔ)區(qū)域保持完整,bios就可以實(shí)現(xiàn)自我修復(fù)。
圖2示意性示出了根據(jù)本公開的實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)方法的流程圖。
如圖2所示,本公開實(shí)施例的系統(tǒng)修復(fù)方法可以應(yīng)用于計(jì)算機(jī)中,所述計(jì)算機(jī)包括基本輸入輸出系統(tǒng)bios,該方法包括如下操作s210-s230。
操作s210,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果。
操作s220,根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整。
操作s230,若程序代碼不完整,則對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。
本實(shí)施例通過從bios的存儲(chǔ)區(qū)域中讀取bios對(duì)應(yīng)的程序代碼,并且對(duì)讀取得到的程序代碼進(jìn)行校驗(yàn),判斷該程序代碼是否完整,若該程序代碼完整,則認(rèn)為bios的該存儲(chǔ)區(qū)域沒有損壞,保持現(xiàn)場(chǎng),若該程序代碼不完整,則認(rèn)為bios的該存儲(chǔ)區(qū)域有損壞現(xiàn)象,需要對(duì)該存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù),以使bios可以正常完成啟動(dòng)。
通過本實(shí)施例的系統(tǒng)修復(fù)方法,可以主動(dòng)檢測(cè)bios的存儲(chǔ)區(qū)域是否被破壞,在檢測(cè)到bios的存儲(chǔ)區(qū)域被破壞時(shí),實(shí)現(xiàn)自動(dòng)刷新修復(fù),無需用戶參與手動(dòng)操作。并且可以準(zhǔn)確判斷是否是因?yàn)閎ios的存儲(chǔ)區(qū)域被破壞導(dǎo)致地bios啟動(dòng)異常,只有在bios的存儲(chǔ)區(qū)域破壞的情況下,才對(duì)bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù),避免由于硬件損壞導(dǎo)致的bios啟動(dòng)異常的情況下,程序代碼被誤刷。
在操作s210中,存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域可以是主板上的一塊rom芯片。bios對(duì)應(yīng)的程序代碼可以固化在主板上的rom芯片中。
根據(jù)本公開實(shí)施例,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,可以是對(duì)bios對(duì)應(yīng)的程序代碼的全部存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,例如,讀取biosrom中的全部程序代碼;也可以是對(duì)全部存儲(chǔ)區(qū)域中的目標(biāo)存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,例如,讀取biosrom中fv_bb存儲(chǔ)區(qū)域的全部程序代碼,或者讀取biosrom中的fv_bb和fv_main兩個(gè)存儲(chǔ)區(qū)域中的全部程序代碼;還可以是對(duì)目標(biāo)存儲(chǔ)區(qū)域中的特定部分進(jìn)行數(shù)據(jù)讀取操作,例如,讀取biosrom中fv_bb存儲(chǔ)區(qū)域中的特定的程序代碼。
在本公開實(shí)施例中,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果,包括對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果,其中,目標(biāo)區(qū)域用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼中的開機(jī)初始化程序代碼。根據(jù)本公開實(shí)施例,開機(jī)初始化程序代碼可以包括參見圖1a中描述的sec階段和pei階段中對(duì)應(yīng)的程序代碼。sec階段和pei階段中對(duì)應(yīng)的程序代碼通常存儲(chǔ)在biosrom中fv_bb存儲(chǔ)區(qū)域。即,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,例如可以是讀取biosrom的fv_bb存儲(chǔ)區(qū)域中的全部程序代碼。
在本公開實(shí)施例中,fv_bb存儲(chǔ)區(qū)域中存儲(chǔ)有bios啟動(dòng)過程中的sec階段和pei階段的程序代碼,只要fv_bb中的程序代碼是完整的,bios就有能力進(jìn)行自我修復(fù)。
因此根據(jù)本公開的實(shí)施例,只對(duì)biosrom中的目標(biāo)區(qū)域中存儲(chǔ)的程序代碼進(jìn)行讀取操作,具有針對(duì)性,可以減少讀取的數(shù)據(jù)量,減少操作時(shí)間,并且只讀取fv_bb存儲(chǔ)區(qū)域中的程序代碼依然可以實(shí)現(xiàn)修復(fù)bios的目的。
在操作s220中,根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整。其中,判斷bios對(duì)應(yīng)的程序代碼是否完整可以包括使用總和檢驗(yàn)碼來校驗(yàn)總和,來判斷數(shù)據(jù)的完整性和準(zhǔn)確性。例如,在計(jì)算機(jī)領(lǐng)域內(nèi),程序代碼以二進(jìn)制形式存儲(chǔ),總和檢驗(yàn)碼通過將二進(jìn)制的程序代碼相加得到校驗(yàn)總和,判斷校驗(yàn)總和是否滿足規(guī)定的數(shù)值(例如,校驗(yàn)總和為0),如果滿足,則表示該程序代碼完整。在本公開實(shí)施例中,判斷bios對(duì)應(yīng)的程序代碼是否完整還可以包括使用公鑰、秘鑰等方法,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,凡是可以實(shí)現(xiàn)校驗(yàn)一段數(shù)據(jù)的完整性的技術(shù)方法都可以應(yīng)用于本公開的判斷bios對(duì)應(yīng)的程序代碼是否完整的操作中。
根據(jù)本公開實(shí)施例,根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整,包括判斷開機(jī)初始化程序代碼是否完整。如果開機(jī)初始化程序代碼完整,則bios有能力實(shí)現(xiàn)自我修復(fù)。本公開的實(shí)施例只針對(duì)開機(jī)初始化程序代碼進(jìn)行校驗(yàn),可以減少校驗(yàn)程序和校驗(yàn)時(shí)間,并且依然可以實(shí)現(xiàn)修復(fù)bios的目的。
在操作s230中,若程序代碼不完整,則對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。根據(jù)本公開實(shí)施例,若程序代碼不完整,則表示biosrom中的存儲(chǔ)區(qū)域損壞,可能會(huì)導(dǎo)致bios無法正常啟動(dòng),此時(shí),需要對(duì)bios進(jìn)行修復(fù),使得修復(fù)后的bios可以正常啟動(dòng)。
圖3示意性示出了根據(jù)本公開的實(shí)施例的對(duì)程序代碼進(jìn)行修復(fù)操作的流程圖。
如圖3所示,操作s230例如可以包括如下操作s231-s232:
操作s231,關(guān)閉所述bios。
操作s232,通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,或者通過所述外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼中的缺失部分進(jìn)行寫入操作。
根據(jù)本公開實(shí)施例,當(dāng)判斷程序代碼不完整時(shí),首先關(guān)閉bios,然后對(duì)bios進(jìn)行修復(fù)。對(duì)bios進(jìn)行修復(fù)可以包括對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,例如,若讀取biosrom中的全部代碼,則對(duì)全部代碼進(jìn)行重寫操作;若讀取biosrom中目標(biāo)區(qū)域fv_bb的全部代碼,則對(duì)fv_bb存儲(chǔ)區(qū)域內(nèi)的程序代碼進(jìn)行重寫操作。對(duì)bios進(jìn)行修復(fù)還可以包括對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼中的缺失部分進(jìn)行寫入操作,例如,讀取biosrom中目標(biāo)區(qū)域fv_bb的全部代碼,經(jīng)過判斷,fv_bb中的fv_bb1文件完整,fv_bb2文件不完整,則對(duì)fv_bb2文件中的程序代碼進(jìn)行重寫操作。
在本公開實(shí)施例中,通過對(duì)bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,可以修復(fù)bios,以使bios可以正常啟動(dòng)。通過針對(duì)bios對(duì)應(yīng)的程序中損壞的部分就行重寫修復(fù),可以節(jié)省時(shí)間,減少修復(fù)難度。
圖4示意性示出了根據(jù)本公開的實(shí)施例的判斷bios啟動(dòng)是否異常操作的流程圖。
如圖4所示,在操作s210之前還包括操作s200。操作s210-s230與上述參考圖2和圖3描述的方法相同或類似。
操作s200,判斷bios啟動(dòng)是否異常,其中,在bios啟動(dòng)異常時(shí),對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作。
根據(jù)本公開實(shí)施例,判斷bios啟動(dòng)是否異常包括判斷bios是否在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),若bios在預(yù)設(shè)時(shí)間內(nèi)完成啟動(dòng),則確定bios啟動(dòng)無異常,否則,確定bios啟動(dòng)異常。例如,可以設(shè)置一計(jì)時(shí)器,計(jì)時(shí)器可以包括watchdog等具有計(jì)時(shí)功能的程序。當(dāng)bios開始啟動(dòng)時(shí),計(jì)時(shí)器開始計(jì)時(shí),如果在計(jì)時(shí)器設(shè)定的時(shí)間內(nèi)bios完成啟動(dòng),則關(guān)閉計(jì)時(shí)器。如果在計(jì)時(shí)器設(shè)定的時(shí)間內(nèi)bios沒有完成啟動(dòng),則到達(dá)設(shè)定時(shí)間時(shí),計(jì)時(shí)器超時(shí)提醒,告知bios啟動(dòng)異常。
在確定bios啟動(dòng)異常時(shí),對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取,具體可以參見上述圖2和圖3描述的方法,在此不再贅述。
在確定bios啟動(dòng)異常時(shí),再進(jìn)行對(duì)bios對(duì)應(yīng)程序代碼的讀取、判斷以及修復(fù)等操作,可以節(jié)省不必要的操作程序,如果bios啟動(dòng)正常,則不需要對(duì)bios進(jìn)行修復(fù),即,不需要對(duì)bios對(duì)應(yīng)的程序代碼進(jìn)行讀取和判斷。
在本公開實(shí)施例中,上述參見圖2-圖4描述的方法可以由基板管理控制器執(zhí)行,在確定bios啟動(dòng)異常的情況下,讀取biosrom中fv_bb存儲(chǔ)區(qū)域中的程序代碼,判斷該區(qū)域中的程序代碼是否完整,若完整,則表示bios有能力實(shí)現(xiàn)自我修復(fù),若不完整,則對(duì)fv_bb存儲(chǔ)區(qū)域進(jìn)行重寫操作,以使bios可以完成啟動(dòng)程序中的sec階段以及pei階段,使得bios可以通過自我修復(fù),實(shí)現(xiàn)正常啟動(dòng)。
通過本公開實(shí)施例提供的計(jì)算機(jī)系統(tǒng)修復(fù)方法可以在bios啟動(dòng)異常時(shí),自動(dòng)進(jìn)行檢查和修復(fù)。并且準(zhǔn)確判斷bios啟動(dòng)異常是否是因?yàn)閎ios的程序代碼不完整導(dǎo)致的,針對(duì)由于程序代碼不完整導(dǎo)致的bios啟動(dòng)異常進(jìn)行bios的修復(fù),避免誤刷現(xiàn)象。在本公開實(shí)施例中,在bios啟動(dòng)異常時(shí),可以只判斷fv_bb存儲(chǔ)區(qū)域中的程序代碼是否完整,并且在不完整的情況下,重寫fv_bb存儲(chǔ)區(qū)域中的程序代碼,用時(shí)短,并且同樣可以實(shí)現(xiàn)對(duì)bios修復(fù)的目的。
圖5a-5b示意性示出了根據(jù)本公開的實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng)500的框圖。
如圖5a所示,系統(tǒng)修復(fù)系統(tǒng)500包括讀取模塊510、第一判斷模塊520、修復(fù)模塊530以及第二判斷模塊540。該系統(tǒng)修復(fù)系統(tǒng)500可以執(zhí)行上面參考圖2-圖4描述的方法,以實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)的系統(tǒng)修復(fù)。
讀取模塊510,用于對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果。根據(jù)本公開實(shí)施例,讀取模塊510例如可以執(zhí)行上文參考圖2描述的操作s210。
第一判斷模塊520,用于根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整。根據(jù)本公開實(shí)施例,第一判斷模塊520例如可以執(zhí)行上文參考圖2描述的操作s220。
修復(fù)模塊530,用于在程序代碼不完整時(shí),對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行修復(fù)。根據(jù)本公開實(shí)施例,修復(fù)模塊530例如可以執(zhí)行上文參考圖2描述的操作s230以及圖3描述的操作s231-s232。
第二判斷模塊540,用于在對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作之前,判斷bios啟動(dòng)是否異常。根據(jù)本公開實(shí)施例,第二判斷模塊540例如可以執(zhí)行上文參考圖4描述的操作s200。
其中,如圖5b所示,修復(fù)模塊530包括關(guān)閉單元531以及寫入單元532。
關(guān)閉單元531,用于關(guān)閉bios。根據(jù)本公開實(shí)施例,關(guān)閉單元531例如可以執(zhí)行上文參考圖3描述操作s231。
寫入單元532,用于通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼進(jìn)行重寫操作,或者用于通過外設(shè)接口總線,對(duì)存儲(chǔ)區(qū)域中存儲(chǔ)的bios對(duì)應(yīng)的程序代碼中的缺失部分進(jìn)行寫入操作。根據(jù)本公開實(shí)施例,寫入單元532例如可以執(zhí)行上文參考圖3描述的操作s232。
具體地,系統(tǒng)修復(fù)系統(tǒng)500可以包括基板管理控制器。在系統(tǒng)修復(fù)過程中,第二判斷模塊540,通過判斷bios是否在預(yù)定時(shí)間內(nèi)完成啟動(dòng)來判斷bios是否啟動(dòng)異常。在確定bios啟動(dòng)出現(xiàn)異常的情況下,讀取模塊510,對(duì)用于存儲(chǔ)bios對(duì)應(yīng)的程序代碼的存儲(chǔ)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,得到讀取結(jié)果。其中,讀取模塊510可以只對(duì)存儲(chǔ)區(qū)域中的目標(biāo)區(qū)域進(jìn)行數(shù)據(jù)讀取操作,例如只讀取biosrom中的fv_bb存儲(chǔ)區(qū)域中的程序代碼。第一判斷模塊520根據(jù)得到的讀取結(jié)果,判斷bios對(duì)應(yīng)的程序代碼是否完整。其中,第一判斷模塊520可以根據(jù)從fv_bb中讀取的程序代碼,判斷該程序代碼是否完整。在該程序代碼不完整的情況下,修復(fù)模塊530中的關(guān)閉單元531關(guān)閉bios,寫入單元通過外設(shè)接口總線,對(duì)fv_bb存儲(chǔ)區(qū)域中的程序代碼進(jìn)行重寫。具體地可以參見上面參考圖2-圖4的描述,這里不再重復(fù)。
通過本公開實(shí)施例提供的計(jì)算機(jī)系統(tǒng)修復(fù)系統(tǒng)可以在bios啟動(dòng)異常時(shí),自動(dòng)進(jìn)行檢查和修復(fù)。并且準(zhǔn)確判斷bios啟動(dòng)異常是否是因?yàn)閎ios的程序代碼不完整導(dǎo)致的,針對(duì)由于程序代碼不完整導(dǎo)致的bios啟動(dòng)異常進(jìn)行bios的修復(fù),避免誤刷現(xiàn)象。在本公開實(shí)施例中,在bios啟動(dòng)異常時(shí),可以只判斷fv_bb存儲(chǔ)區(qū)域中的程序代碼是否完整,并且在不完整的情況下,重寫fv_bb存儲(chǔ)區(qū)域中的程序代碼,用時(shí)短,并且同樣可以實(shí)現(xiàn)對(duì)bios修復(fù)的目的。
可以理解的是,讀取模塊510、第一判斷模塊520、修復(fù)模塊530以及第二判斷模塊540可以合并在一個(gè)模塊中實(shí)現(xiàn),或者其中的任意一個(gè)模塊可以被拆分成多個(gè)模塊?;蛘?,這些模塊中的一個(gè)或多個(gè)模塊(例如,關(guān)閉單元531以及寫入單元532)的至少部分功能可以與其他模塊的至少部分功能相結(jié)合,并在一個(gè)模塊中實(shí)現(xiàn)。根據(jù)本發(fā)明的實(shí)施例,讀取模塊510、第一判斷模塊520、修復(fù)模塊530以及第二判斷模塊540中的至少一個(gè)可以至少被部分地實(shí)現(xiàn)為硬件電路,例如現(xiàn)場(chǎng)可編程門陣列(fpga)、可編程邏輯陣列(pla)、片上系統(tǒng)、基板上的系統(tǒng)、封裝上的系統(tǒng)、專用集成電路(asic),或可以以對(duì)電路進(jìn)行集成或封裝的任何其他的合理方式等硬件或固件來實(shí)現(xiàn),或以軟件、硬件以及固件三種實(shí)現(xiàn)方式的適當(dāng)組合來實(shí)現(xiàn)?;蛘撸x取模塊510、第一判斷模塊520、修復(fù)模塊530以及第二判斷模塊540中的至少一個(gè)可以至少被部分地實(shí)現(xiàn)為計(jì)算機(jī)程序模塊,當(dāng)該程序被計(jì)算機(jī)運(yùn)行時(shí),可以執(zhí)行相應(yīng)模塊的功能。
圖6示意性示出了根據(jù)本公開的另一實(shí)施例的用于計(jì)算機(jī)的系統(tǒng)修復(fù)系統(tǒng)的框圖。
如圖6所示,系統(tǒng)修復(fù)系統(tǒng)600包括處理器610以及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)620。該系統(tǒng)修復(fù)系統(tǒng)600可以執(zhí)行上面參考圖2-圖4描述的方法,以實(shí)現(xiàn)用于計(jì)算機(jī)的系統(tǒng)修復(fù)功能。
具體地,處理器610例如可以包括通用微處理器、指令集處理器和/或相關(guān)芯片組和/或?qū)S梦⑻幚砥?例如,專用集成電路(asic)),等等。處理器610還可以包括用于緩存用途的板載存儲(chǔ)器。處理器610可以是用于執(zhí)行參考圖2~圖4描述的根據(jù)本公開實(shí)施例的方法流程的不同動(dòng)作的單一處理單元或者是多個(gè)處理單元。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)620,例如可以是能夠包含、存儲(chǔ)、傳送、傳播或傳輸指令的任意介質(zhì)。例如,可讀存儲(chǔ)介質(zhì)可以包括但不限于電、磁、光、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置、器件或傳播介質(zhì)。可讀存儲(chǔ)介質(zhì)的具體示例包括:磁存儲(chǔ)裝置,如磁帶或硬盤(hdd);光存儲(chǔ)裝置,如光盤(cd-rom);存儲(chǔ)器,如隨機(jī)存取存儲(chǔ)器(ram)或閃存;和/或有線/無線通信鏈路。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)620可以包括計(jì)算機(jī)程序621,該計(jì)算機(jī)程序621可以包括代碼/計(jì)算機(jī)可執(zhí)行指令,其在由處理器610執(zhí)行時(shí)使得處理器610執(zhí)行例如上面結(jié)合圖2~圖4所描述的方法流程及其任何變形。
計(jì)算機(jī)程序621可被配置為具有例如包括計(jì)算機(jī)程序模塊的計(jì)算機(jī)程序代碼。例如,在示例實(shí)施例中,計(jì)算機(jī)程序621中的代碼可以包括一個(gè)或多個(gè)程序模塊,例如包括621a、模塊621b、……。應(yīng)當(dāng)注意,模塊的劃分方式和個(gè)數(shù)并不是固定的,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際情況使用合適的程序模塊或程序模塊組合,當(dāng)這些程序模塊組合被處理器610執(zhí)行時(shí),使得處理器610可以執(zhí)行例如上面結(jié)合圖2~圖4所描述的方法流程及其任何變形。
盡管已經(jīng)參照本公開的特定示例性實(shí)施例示出并描述了本公開,但是本領(lǐng)域技術(shù)人員應(yīng)該理解,在不背離所附權(quán)利要求及其等同物限定的本公開的精神和范圍的情況下,可以對(duì)本公開進(jìn)行形式和細(xì)節(jié)上的多種改變。因此,本公開的范圍不應(yīng)該限于上述實(shí)施例,而是應(yīng)該不僅由所附權(quán)利要求來進(jìn)行確定,還由所附權(quán)利要求的等同物來進(jìn)行限定。