用於 Linux 的開放 BIOS開源專案介紹(轉)
用於 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,或其他類似的東西,那麼這種設定工作就意味著我們可以很快就有自己的命令提示符了。
響鈴!
儘管在 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .NET 開源專案 StreamJsonRpc 介紹JSONRPC
- .NET 開源專案 StreamJsonRpc 介紹[中篇]JSONRPC
- .NET 開源專案 StreamJsonRpc 介紹[下篇]JSONRPC
- Web專案開發介紹及實戰專案介紹Web
- 企業應用開發和開放原始碼專案 (轉)原始碼
- OpenSNS開源社群將開放授權給優秀開源專案使用
- OpenSNS開放授權,為ThinkPHP開源專案提供助力PHP
- 關於 Spartacus 開源專案的 peerDependencies
- 基於Java+Spring Boot開源專案JeeSite的Jenkins持續互動介紹JavaSpring BootJenkins
- GitHub實用開源專案Github
- XCharts 開源庫介紹
- 介紹 Moby 專案:推進軟體容器化運動的一個新的開源專案
- 10大開源的Web應用防火牆介紹Web防火牆
- 蘭州大學第二屆Linux開放日暨開源社群對外開放(轉)Linux
- Linux下C開發工具介紹(轉)Linux
- FASTDFS開源分散式檔案系統介紹AST分散式
- 文字識別(OCR)介紹與免費開源專案使用測評
- 開源CMS系統介紹
- 開源Spring Scala介紹Spring
- 開源≠免費 常見開源協議介紹協議
- 瘋狂的Web應用開源專案Web
- 基於 Github 平臺的 .NET 開源專案模板. 嘎嘎實用!Github
- 「實戰篇」開源專案docker化運維部署-原始碼介紹(二)Docker運維原始碼
- 一個檔案的開源專案,開啟你的開源之旅
- [轉] Android優秀開源專案Android
- android開源專案和框架(轉)Android框架
- 媒體專訪 | 開源開放,OceanBase 的“成人禮”
- 介紹一款用於搞亂資料庫ID的開源Python庫資料庫Python
- 介紹專門顯示資料表格開源taglib
- 手寫開源ORM框架介紹ORM框架
- 開源測試工具 JMeter 介紹JMeter
- RK3288最新開源開發板介紹
- IOS開源專案iOS
- 開源專案-WaterMark
- 淘寶開源專案
- 開源專案:MMPopupViewView
- 基於.NET Core的優秀開源專案合集
- 開源專案推薦:提高研發效率的5個開源專案