專利名稱:基本輸入輸出系統(tǒng)的追蹤除錯方法
技術領域:
本發(fā)明涉及一種基本輸入輸出系統(tǒng)(BIOS)的追蹤除錯方法,是一種專為BIOS在開機自測(Power On Self Test;POST)階段,正確找出造成測試出錯的硬件或原因的除錯方法,也就是為BIOS出廠前的測試作業(yè)而設計的一種除錯方法。
開機自測(簡稱POST)屬于基本輸入輸出系統(tǒng)(Basic Input OutputSystem,簡稱BIOS)的一部分,電腦電源一開啟會先執(zhí)行POST程序對硬件進行測試或初始化程序,在確認硬件設備都屬于正常工作狀態(tài)后,才會載入作業(yè)系統(tǒng)。POST程序是由一連患的子程序(sub-routine)所組成,每個子程序可能包含數個硬件測試或初始化的動作;在POST階段依序執(zhí)行每個子程序的同時,會將該子程序的代碼輸出至一特定輸入輸出(I/O)位址的調試端口(Debug port),當POST測試因某個動作的執(zhí)行發(fā)生錯誤而停止時,即要借由讀取調試端口的值來得知是哪一個子程序產生錯誤。
即使技術人員知道在POST測試的過程中,錯誤是發(fā)生在哪一個子程序,但卻仍然無法正確的判斷是哪一個硬件發(fā)生故障,因為在一個子程序之中可能會依特定的分類或某特定的步驟設計,對多個硬件裝置做測試及初始化,所以即使知道錯誤是發(fā)生在此一子程序,仍然無法確定是由哪個硬件的錯誤所導致。
例如現有的技術中,某一電腦系統(tǒng)的POST 01的子程序中,需執(zhí)行下列四個步驟POST程序例1
1.Out debug port with POST function number=Olh2.call POST_Olh sub-routine·Setup HDD controller·Rest HD drives·Update CPU micro-code·Config and enable L2 cache而上述POST程序的子程序在開始執(zhí)行前,將會輸出一個olh的值,如果系統(tǒng)當在此一子程序中,則無法知道是HD otroller有問題,還是在enable cache時有問題。
所以,技術人員必需再花費時間針對該子程序中的每個硬件進行局部測試,確實浪費許多時間及人力。
本發(fā)明的主要目的就是要提供一種專為BIOS在POST階段,可以正確找出造成測試出錯的硬件或原因的除錯方法。
本發(fā)明的另的目的在于提供一種可以正確找出錯誤原因,又不致影響B(tài)IOS在使用時的執(zhí)行效率的除錯方法。
本發(fā)明的方法主要是在測試或初始化的硬件超過一個以上或是測式步驟冗長的子程序中的適當位置,插入一[錯誤輸出指令],用在以任何一個硬件測試或初始化之后輸出某一特定值到調試端口,并且在該[錯誤輸出指令]前插入一條件判斷式,以便在編譯子程序時決定是否要將該[錯誤輸出指令]加入編譯。因此、借由對該條件判斷式的控制,將可以決定這個BIOS成為出廠前供技術人員對BIOS進行追蹤除錯的測試版BIOS,或是正式出貨的正式版BIOS。
下面結合實施例所示附圖,對本發(fā)明作進一步詳細說明。
圖1為本發(fā)明的完整測試流程圖。
本發(fā)明所提供的方法,可以協(xié)助技術人員正確地找出在開機自測階段造成BIOS測試或初始化錯誤的硬件或原因。此一方法主要可以借由下列兩個步驟完成,其包括有插入一[錯誤輸出指令]的步驟;以及使前述[錯誤輸出指令]啟動(enable)的步驟。
在插入[錯誤輸出指令]的步驟中,主要是針對POST程序之中那些用以測試或初始化的硬件超過一個以上或是測試步驟冗長的子程序,在這種子程序中的任一個硬件測試或初始化步驟之后加入一種[錯誤輸出指令],而這種[錯誤輸出指令]的功能就是在每一個硬件的測試或初始化步驟之后輸出某特定值到調試端口的指令。一旦因為某個硬件造成測試或初始化的錯誤、失敗(failure)或死機,技術人員便可以通過讀取調試端口的值,而正確的知道是那個硬件所造成,進而排除故障。
但是在加上前述的[錯誤輸出指令]之后,POST程序在BIOS之中所占的空間勢必超過其原先所設計的大小,而且這種應用于BIOS的調試功能對于消費者而言,并不需要,而且過長過大的POST程序也會影響B(tài)IOS的執(zhí)行效率。
因此在本發(fā)明的主要步驟中使前述[錯誤輸出指令]啟動的步驟,其功能便是用于決定BIOS的版本,也就是通過這個步驟的加入,將可以決定含有POST程序的BIOS是出廠前供技術人員除錯測試的[測試版BIOS],也或是正式出廠供消費者使用的[正式版BIOS];為了實現此一功能,本發(fā)明是在每一個[錯誤輸出指令]之前加入一個[條件判斷式],當此一[條件判斷式]成立時,才會在進行BIOS的POST測試作業(yè)中,對本發(fā)明所加入的[錯誤輸出指令]進行編譯,使其正常的執(zhí)行,用以在子程序中的任一個硬件進行測試或初始化步驟之后,輸出某特定值到調試端口。
以前述的[POST程序例1]為例,若依據本發(fā)明的方法實施,則其中POST 01的子程序將改寫如下POST程序例21.Out debug port with POST function number=Olh2.call POST Olh sub-routine·Setup HDD controller·if #debug enable ←插入的[條件判斷式]out debug port with E1h←插入的[錯誤輸出指令]·Rest HD drives·if #debug enable ←插入的[條件判斷式]out debug port with E2h←插入的[錯誤輸出指令]·Update CPU micro-code·if #debug enable ←插入的[條件判斷式]out debug port with E3h←插入的[錯誤輸出指令]·Config and enable L2 cache·if #debug enable ←插入的[條件判斷式]out debug port with E4h←插入的[錯誤輸出指令]而在上述的[POST程序例2]之中的[E1h]、[E2h]、[E3h]與[E4h],則是各個[錯誤輸出指令]輸出至調試端口的特定值,當然這個特定值并非僅限于上述例子中的值。
依據本發(fā)明所公開技術手段,位于[錯誤輸出指令]之前的[條件判斷式],可以借由讀取某一個由程序設計者所指定的特定變數的值來決定此一條件判斷式是否成立,也可以是指除了某一特定值之外便視為無效的判斷式。而在上述[POST程序例2]之中的“debug”就是一個變數。而這個變數的數據格式我們可以定義為一個邏輯值(fail or ture)。所以、技術人員可以通過下達一個指令(例如debug=true或debug=fail),或是改變其邏輯值的方式使這個條件判斷式成立,進而使得BIOS在進行POST測試作業(yè)之前,決定是否要將本發(fā)明所加入的[錯誤輸出指令]編譯加入POST程序之中。
一旦[條件判斷式]的條件成立,本發(fā)明所加入的[錯誤輸出指令]就會被編譯加入POST程序之中,也就是說[錯誤輸出指令]將被啟動,用以在子程序中的任一個硬件進行測度或初始化步驟之后,輸出某特定值到調試端口。當然、為了提高BIOS在出廠前的除錯測試效率,技術人員可以先依一般的測試方式在[錯誤輸出指令]不啟動(disable)的情形下對BIOS進行POST測試,假若發(fā)現某一個BIOS發(fā)生故障或錯誤時,再重新通過下達指令的方式使[錯誤輸出指令]啟動(此時的BIOS將變成所謂的[測試版BIOS]),以便進一步追蹤查出造成BIOS錯誤的硬件或原因。一旦BIOS通過POST測試出廠,為了不影響B(tài)IOS在日后被使用者使用時的執(zhí)行效果,技術人員將同樣可以通過下達指令的方式使[錯誤輸出指令]不啟動(disable)(此時的BIOS將變成所謂的[正式版BIOS]),因此、在一般消費者使用BIOS時,本發(fā)明在POST程序之中加入的[錯誤輸出指令]就不會被編譯加入POST程序,而不影響B(tài)IOS的執(zhí)行效率。
最后請參照圖1,其為依據本發(fā)明的技術設計完成的POST程序的完整工作流程;首先,技術人員設定啟動變數的值(步驟10),以決定在POST測試的過程中是否要在任一個硬件進行測試或初始化步驟之后,輸出某特定值到調試端口。接著依序執(zhí)行POST程序中的第一個子程序(步驟11),直至全部的子程序執(zhí)行完畢便結束POST的測試(步驟16)。在每一個子程序中同樣地將先依序執(zhí)行每一個硬件測試或初始化步驟(步驟12),接著在啟動變數被設定為“啟動”時(步驟13),輸出某特定值到調試端口(步驟14),反之當啟動變數被設定為“不啟動”時(步驟13),則繼續(xù)進行循環(huán)直至目前的子程序中的全部硬件進行測試或初始化步驟執(zhí)行完畢(步驟15),然后進入由(步驟11)與(步驟16)所構成的循環(huán),直至全部的子程序都執(zhí)行完畢,便結束POST的測試。
本發(fā)明具有如下有益效果1、可以正確地找出造成測試出錯的硬件或原因。
2、節(jié)省時間及人力。假設一個BIOS的測試因采用此法,平均可以節(jié)省修護時間30分鐘,則每1000片總共將可省下極為可觀的工時。
3、不影響正式版BIOS的執(zhí)行效率。由于在編譯BIOS的POST程序碼時,可以借由下達適當的指令將BIOS編譯成供測試用的[測試版BIOS]或正式出貨用的[正式版BIOS],兩者提供不同的用途,不會互相影響,更不會影響到正式版BIOS的執(zhí)行效率。
以上所述,僅為本發(fā)明的較佳實放例而已,并非用以限定本發(fā)明的實施范圍,凡按照本發(fā)明的權利要求所做的同等變化與修飾,均為本發(fā)明的權利要求保護范圍所涵蓋。
權利要求
1.一種BIOS的追蹤除錯方法,用以在BIOIS的POST階段,正確找出測試出錯的硬件或原因的除錯方法,其包括有插入一[錯誤輸出指令]的步驟,是在POST程序的子程序中的任一個硬件測試或初始化步驟之后加入一種[錯誤輸出指令],用以在進行該硬件測試或初始化步驟之后輸出某特定值到調試端口;以及使前述[錯誤輸出指令]啟動的步驟,是在該[錯誤輸出指令]之前加入一條件判斷式,用以在條件成立時啟動該[錯誤輸出指令],用以輸出某特定值到調試端口。
2.如權利要求1所述的BIOS的追蹤除錯方法,其中該條件判斷是否成立是由設定一特定變數的值,以及判斷該特定變數之值所決定。
3.如權利要求2所述的BIOS的追蹤除錯方法,其中還包括有一設定該特定變數值的步驟。
4.如權利要求1所述的BIOS的追蹤除錯方法,其中該[錯誤輸出指令]是在該條件成立時才被編譯而且被加入POST程序之中。
全文摘要
一種BIOS的追蹤除錯方法,其包括有:插入一[錯誤輸出指令]的步驟,是在POST程序的子程序中的任一個硬件測試或初始化步驟之后加入一種[錯誤輸出指令],用以在進行該硬件測試或初始化步驟之后輸出某特定值到調試端口;以及使前述[錯誤輸出指令]啟動的步驟,是在該[錯誤輸出指令]之前加入一條件判斷式,用以在條件成立時啟動該[錯誤輸出指令],用以輸出某特定值到調試端口。
文檔編號G06F11/34GK1362671SQ0110005
公開日2002年8月7日 申請日期2001年1月5日 優(yōu)先權日2001年1月5日
發(fā)明者陳松柏 申請人:英業(yè)達股份有限公司