【技術(shù)領(lǐng)域】
本發(fā)明涉及一種用于在計(jì)算機(jī)內(nèi)部bios里解決故障的用于防止因topswap問題而cpu不開機(jī)的bios解決方法。
背景技術(shù):
隨著科技不斷進(jìn)步和發(fā)展,計(jì)算機(jī)已經(jīng)被廣泛應(yīng)用于各個(gè)行業(yè)中。例如:個(gè)人電腦,工業(yè)控制電腦,服務(wù)器等。這些計(jì)算機(jī)大部分都安裝著intel的cpu和pch。bios芯片是整個(gè)電腦系統(tǒng)中關(guān)鍵部分,而boot-block是bios程序中最重要的文件區(qū)域,該文件區(qū)域是bios程序中最先執(zhí)行的引導(dǎo)部分。如果此引導(dǎo)部分被破壞,則cpu根本就無法執(zhí)行程序。又因?yàn)樗鲆龑?dǎo)部分被破壞,而容易導(dǎo)致bios程序的recovery部分功能無法使用。在實(shí)際使用過程中,由于高海拔地區(qū)的強(qiáng)宇宙射線干擾的自然環(huán)境下和應(yīng)用場景比較惡劣的條件,很可能導(dǎo)致pch寄存器“backedupcontrolregister”的“top_swap”bit莫名其妙地被置成1的情況發(fā)生,而造成電腦無法開機(jī)。
技術(shù)實(shí)現(xiàn)要素:
鑒于現(xiàn)有技術(shù)缺陷,本發(fā)明技術(shù)目的是提供一種用于防止因topswap問題而cpu不開機(jī)的bios解決方法,該bios解決方法能夠解決在強(qiáng)宇宙射線干擾的自然環(huán)境下和應(yīng)用場景比較惡劣的條件下,因pch寄存器“backedupcontrolregister”的“top_swap”bit自動(dòng)被置成1時(shí),而導(dǎo)致cpu無法開機(jī)的技術(shù)問題。
為了實(shí)現(xiàn)上述技術(shù)目的,本發(fā)明提供一種用于防止因topswap問題而cpu不開機(jī)的bios解決方法,其操作步驟為:
第一步,生成制作補(bǔ)丁的原材料biosbin文件:
在biossec階段的匯編語言源文件中,使用匯編語言在“backedupcontrolregister”寄存器的“top_swap”位寫0,然后,在0xcf9端口寫入0xe;編譯即可得到原材料biosbin文件,由于修改的是sec階段的匯編code,所以修改部分被編譯后,對應(yīng)的可執(zhí)行代碼位于ffff_0000h段;“backedupcontrolregister”寄存器的編號(hào)為(sb_rcba+0x3414),“top_swap”為該寄存器的bit0;后面的步驟會(huì)從原材料biosbin文件中提取補(bǔ)丁,該補(bǔ)丁會(huì)清掉pch中寄存器“backedupcontrolregister”的“top_swap”位,再重啟電腦;
第二步,制作生成補(bǔ)丁的工具:
用vc6.0,vc2005或者vc2008編寫一個(gè)程序,該程序讀取第一步準(zhǔn)備好的bios之最高端64kb數(shù)據(jù),即ffff_0000h段,生成一個(gè)64kb補(bǔ)丁數(shù)據(jù);
第三步,制作把補(bǔ)丁數(shù)據(jù)插入bios的工具:
用vc6.0,vc2005或者vc2008編寫一個(gè)程序,該程序可以把上面第二步得到的64kb補(bǔ)丁數(shù)據(jù)插入到待發(fā)布bios的fffe_0000h段;
第四步,將第三步得到的插入補(bǔ)丁之工具以64kb補(bǔ)丁做為入?yún)?植入到bios的.mak文件中,實(shí)現(xiàn)自動(dòng)化運(yùn)作,無需人工做額外的操作。
依據(jù)上述主要技術(shù)特征所述,在整個(gè)方案中,使用了兩個(gè)自制的.exe工具,其中一個(gè).exe工具用于生成第一補(bǔ)丁數(shù)據(jù),另一個(gè).exe工具把第一補(bǔ)丁數(shù)據(jù)插入bios的fffe_0000h;待以上的第一補(bǔ)丁數(shù)據(jù)和.exe工具準(zhǔn)備好了后,可以將插入補(bǔ)丁的.exe小程序以這個(gè)64kb補(bǔ)丁數(shù)據(jù)作為入?yún)?,植入到bios的.mak文件,把補(bǔ)丁數(shù)據(jù)插入到fffe_0000h,以便覆蓋原來的全0xff;當(dāng)pch寄存器“backedupcontrolregister”的top_swap位被置起成1時(shí),cpu開機(jī)時(shí)將首先訪問地址fffe_0000h段,而top_swap位被置0時(shí),首先訪問的是ffff_0000h段;由此我們可以通過改變top_swap位,來改變開機(jī)時(shí)cpu訪問的首地址。
本發(fā)明的有益技術(shù)效果:因本技術(shù)方案采用vc2008制作成補(bǔ)丁工具,再利用補(bǔ)丁工具處理原材料biosbin文件,制作生成64kb補(bǔ)丁數(shù)據(jù),最后將64kb補(bǔ)丁數(shù)據(jù),在編譯時(shí)自動(dòng)植入到待發(fā)布的bios中去,實(shí)現(xiàn)自動(dòng)化工作,在此過程中,bios利用top-blockswap的機(jī)制,解決在強(qiáng)宇宙射線干擾的自然環(huán)境下和應(yīng)用場景比較惡劣的條件下,因pch寄存器“backedupcontrolregister”的top_swap位自動(dòng)被置成1時(shí),而導(dǎo)致cpu無法開機(jī)的故障。另外,以植入小程序到.mak的方式,實(shí)現(xiàn)全自動(dòng)化操作,所以無需做額外的人工操作,方便有效。
為對本發(fā)明的目的、構(gòu)造特征及其功能有進(jìn)一步的了解,茲配合附圖詳細(xì)說明如下:
【附圖說明】
圖1為本發(fā)明中bios解決方法的流程圖;
圖2為本發(fā)明中與bios解決方法相關(guān)的示意圖。
【具體實(shí)施方式】
為了使本發(fā)明所要解決的技術(shù)問題、技術(shù)方案及有益效果更加清楚、明白,以下結(jié)合附圖和實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
請參閱圖1及圖2所示,下面結(jié)合實(shí)施例來說明本發(fā)明所提供一種用于防止因topswap問題而cpu不開機(jī)的bios解決方法,其操作步驟為:
第一步,生成制作補(bǔ)丁的原材料biosbin文件:
在biossec階段的匯編語言源文件中,使用匯編語言在“backedupcontrolregister”寄存器的“top_swap”位寫0,然后,在0xcf9端口寫入0xe;編譯即可得到原材料biosbin文件,由于修改的是sec階段的匯編code,所以修改部分被編譯后,對應(yīng)的可執(zhí)行代碼位于ffff_0000h段;“backedupcontrolregister”寄存器的編號(hào)為(sb_rcba+0x3414),“top_swap”為該寄存器的bit0;后面的步驟會(huì)從原材料biosbin文件中提取補(bǔ)丁,該補(bǔ)丁會(huì)清掉pch中寄存器“backedupcontrolregister”的“top_swap”位,再重啟電腦。
第二步,制作生成補(bǔ)丁的工具:
用vc6.0,vc2005或者vc2008編寫一個(gè)程序,該程序讀取第一步準(zhǔn)備好的bios之最高端64kb數(shù)據(jù),即ffff_0000h段,生成一個(gè)64kb補(bǔ)丁數(shù)據(jù)。
第三步,制作把補(bǔ)丁數(shù)據(jù)插入bios的工具:
用vc6.0,vc2005或者vc2008編寫一個(gè)程序,該程序可以把上面第二步得到的64kb補(bǔ)丁數(shù)據(jù)插入到待發(fā)布bios的fffe_0000h段。
第四步,將第三步得到的插入補(bǔ)丁之工具以64kb補(bǔ)丁做為入?yún)?植入到bios的.mak文件中,實(shí)現(xiàn)自動(dòng)化運(yùn)作,無需人工做額外的操作。
在上述整個(gè)方案中,使用了兩個(gè)自制的.exe工具,其中一個(gè).exe工具用于生成第一補(bǔ)丁數(shù)據(jù),另一個(gè).exe工具把第一補(bǔ)丁數(shù)據(jù)插入bios的fffe_0000h;待以上的第一補(bǔ)丁數(shù)據(jù)和.exe工具準(zhǔn)備好了后,可以將插入補(bǔ)丁的.exe小程序以這個(gè)64kb補(bǔ)丁數(shù)據(jù)作為入?yún)?,植入到bios的.mak文件,把補(bǔ)丁數(shù)據(jù)插入到fffe_0000h,以便覆蓋原來的全0xff;當(dāng)pch寄存器“backedupcontrolregister”的top_swap位被置起成1時(shí),cpu開機(jī)時(shí)將首先訪問地址fffe_0000h段,而top_swap位被置0時(shí),首先訪問的是ffff_0000h段;由此我們可以通過改變top_swap位,來改變開機(jī)時(shí)cpu訪問的首地址。
crb公板bios的fffe_0000h段的數(shù)據(jù)都為0xff,即視為無效數(shù)據(jù),ffff_0000h段是有效的可執(zhí)行代碼。當(dāng)top_swap位被意外置起時(shí),cpu會(huì)到fffe_0000h段去獲取第一條執(zhí)行的指令,由于是全0xff,無法執(zhí)行而hang住。在開發(fā)維護(hù)bios的過程中,曾經(jīng)遇到過pch寄存器“backedupcontrolregister”的top_swap位莫名其妙地被置成1的情況,其結(jié)果就是cpu獲取的第一條指令非法(全0xff),即使對top_swap位加了保護(hù)鎖(lock-down)也無濟(jì)于事。經(jīng)多方檢查分析后發(fā)現(xiàn)是高海拔地區(qū)強(qiáng)宇宙射線干擾所致。但是很明顯,bios可利用top-blockswap的機(jī)制來解決這個(gè)問題。此方法簡單,有效,不再需要每次都打開機(jī)箱去卸下cmos電池,極大地降低bios開發(fā)人員的維護(hù)成本,減少用戶的困惑。當(dāng)故障發(fā)生的時(shí)候,主板上的各器件已經(jīng)有電,s5#信號(hào)拉高了(開機(jī)信號(hào)),但是bios一條指令都沒有執(zhí)行。使用分析儀可以發(fā)現(xiàn),cpu執(zhí)行的第一條指令竟然是全ff,顯然是無效的指令,死機(jī)是必然的。發(fā)生這種故障后,板載的bios程序完全不能工作,更談不上使用dos和uefishell下的bios刷新工具,恢復(fù)系統(tǒng)都成了問題。唯一的規(guī)避方法就是打開主機(jī)機(jī)箱,取下主板上的cmos電池,因?yàn)閜ch寄存器“backedupcontrolregister”的top_swap位可以由rtcrst#信號(hào)被拉低,而清成0;而發(fā)出rtcrst#信號(hào)就需要取下主板上的cmos電池??梢韵胂?,這個(gè)規(guī)避方法是十分煩人的,也是客戶所不能接受的。另外,對于bios工程師來說,由于bios沒有運(yùn)行,串口等調(diào)試方法都無法使用,幾乎無法判定問題所在,資深工程師也要多方分析驗(yàn)證才能有所頭緒。當(dāng)top_swap位被意外置起時(shí),cpu會(huì)到fffe_0000h段去獲取第一條執(zhí)行的指令。本發(fā)明在fffe_0000h段塞入補(bǔ)丁,再主動(dòng)重啟,使整個(gè)系統(tǒng)起死回生。而且是使用自編的小程序和.mak文件嵌入該程序作為外部命令,做到自動(dòng)嵌入補(bǔ)丁到biosbin文件中,不需要人工手動(dòng)合成,使用很方便,維護(hù)成本低。
綜上所述,因本技術(shù)方案采用vc2008制作成補(bǔ)丁工具,再利用補(bǔ)丁工具處理原材料biosbin文件,制作生成64kb補(bǔ)丁數(shù)據(jù),最后將64kb補(bǔ)丁數(shù)據(jù),在編譯時(shí)自動(dòng)植入到待發(fā)布的bios中去,實(shí)現(xiàn)自動(dòng)化工作,在此過程中,bios利用top-blockswap的機(jī)制,解決在強(qiáng)宇宙射線干擾的自然環(huán)境下和應(yīng)用場景比較惡劣的條件下,因pch寄存器“backedupcontrolregister”的top_swap位自動(dòng)被置成1時(shí),而導(dǎo)致cpu無法開機(jī)的故障。另外,以植入小程序到.mak的方式,實(shí)現(xiàn)全自動(dòng)化操作,所以無需做額外的人工操作,方便有效。
以上參照附圖說明了本發(fā)明的優(yōu)選實(shí)施例,并非因此局限本發(fā)明的權(quán)利范圍。本領(lǐng)域技術(shù)人員不脫離本發(fā)明的范圍和實(shí)質(zhì)內(nèi)所作的任何修改、等同替換和改進(jìn),均應(yīng)在本發(fā)明的權(quán)利范圍之內(nèi)。