用於 Linux 的開放 BIOS開源專案介紹(轉)

ba發表於2007-08-15
用於 Linux 的開放 BIOS開源專案介紹(轉)[@more@]  在很多系統上,引導時間中有很大一部分都花費在為 MS-DOS 提供傳統支援上面了。有很多專案,包括 LinuxBIOS 和 Open Firmware,都試圖使用最新的程式碼來替換原有的 BIOS 系統,它們只實現載入並執行 Linux 核心所必需的功能。本文對這個領域的內容簡要進行了介紹。

  響鈴!

  儘管在 PC 硬體加電時喇叭響一下看起來似乎是件非常自然的事情,但實際上卻有一些程式碼來驅動喇叭發聲。這段程式碼就是引導韌體。在大部分 PC 上,這都稱為 BIOS(這個單詞是 basic input/output system(基本輸入/輸出系統)的縮寫)。BIOS 提供了底層的硬體支援,早期的 x86 作業系統就是使用它們來訪問磁碟、顯示器和其他東西的。

  BIOS 要做的第一件事情是執行各種加電測試:確定(還可能要測試)可用記憶體、確定時鐘速度等。如果測試成功,機器的喇叭就會響一聲。這個過程就稱為加電測試(power-on self test)或 POST.計算機對於自己是相當幽默的,這個術語通常會被當作動詞來使用:“這臺機器根本通不過 POST 測試,因此我們應該更換記憶體”。

  通常的診斷包括響鈴程式碼(不同供應商提供的程式碼都不相同),或者可以寫入到某個特定裸地址的程式碼。有些後插的卡可以簡單地訪問這些程式碼;標準的解決方案是診斷程式碼都寫到 80 埠中。有些製造商會銷售一種卡,它可以以 16 進位制的形式顯示最新寫入到 80 埠的內容。如果我們要進行嚴格除錯,可能就會希望有一個這種卡,或者希望使用一個更好的發明,例如 PC Weasel,它可以記錄最新的(256)POST 程式碼以供大家閱讀。(有關 PC Weasel 的更多資訊請參看下面的 參考資料 一節的內容。)當然,這些程式碼的確切含義對於各個 BIOS 來說不盡相同,只有部分供應商提供了文件。幸運的是,開源供應商提供了很好的文件。

  BIOS 還為我們實現了哪些功能?

  諸如 MS-DOS 之類的作業系統可以載入其他裝置驅動程式,例如 CD-ROM 驅動器,但是需要所有硬體驅動程式在啟動時就已經載入上來了。為這些驅動程式提供的標準介面是由 BIOS 來處理的,正是由於這個原因,BIOS 需要對裝置進行探測、識別,還可能要進行初始化。

  同樣,BIOS 要負責對記憶體進行初始化。並非所有的作業系統都需要對記憶體進行初始化,但是早期的 DOS 系統通常都需要進行這種操作,即使在今天大部分 BIOS 為了相容性的目的也需要進行初始化。這個過程自己可能需要很長時間才能完成,很多現代系統允許徹底或部分地將其禁用。同時,BIOS 還會試圖確定系統中有多少記憶體可用。其他的引導時操作還可能包括對處理器快取的初始化和啟用,配置雙 CPU,構建有關處理器的資訊表,構建連線到系統中的 PCI 裝置,甚至執行這些裝置提供的引導 ROM,這可以載入其他驅動程式。

  這裡有很多工作需要做。實際上這些工作是如此繁雜,我的某些系統要花一分鐘甚至更長時間才能完成 POST 和後續的驅動程式初始化過程。BIOS 可以執行各種硬體掃描,從而尋找可引導的裝置,在某些系統上,BIOS 甚至可以執行透過乙太網進行的網路引導。我的一個系統就會花大約 5 秒鐘的時間來初始化網路引導引數,即使在禁用了網路引導功能的情況下也是如此。這可真令人懊惱!

  最後一點(但不是最不重要的一點),BIOS 還需要做相當多的初始化工作。不管您要引導什麼系統,這些工作中的一部分(但並非全部)都會非常有用。為裝置分配中斷請求(IRQ)的確是一個非常有用的服務,因為它允許 OS 只獲取一個服務列表並開始執行,而不用對它們進行程式設計。很多裝置都有配置暫存器,BIOS 可以基於系統可寫記憶體中的設定向其中寫入合理或正確的值。(通常來說,這種記憶體都稱為 CMOS,儘管它們並非嚴格要求使用這種技術來實現。)

  在 BIOS 完成上面這些功能之後又會發生什麼呢?它會在某個地方(通常是在磁碟上)查詢一段程式碼,並執行它,這通常會載入一個作業系統。如果作業系統是 DOS,或其他類似的東西,那麼這種設定工作就意味著我們可以很快就有自己的命令提示符了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-959041/,如需轉載,請註明出處,否則將追究法律責任。

相關文章