1. 程式人生 > 其它 >BIOS入門與學習資源

BIOS入門與學習資源

我們已經使用BIOS超過了二十年.可是直到今天還有許多朋友不知道BIOS到底是什麼,以及它主要做些什麼事情,它在整個個人計算機之中所處的地位如何.事實上,BIOS是整個計算機系統中最重要的底層系統軟體.二十多年來,中國的程式設計師們紛紛忽略了BIOS,或者由BIOS衍生出的開發技術,相反,我們對如何調整一兩個BIOS設定津津樂道.今天,BIOS業界開始悄悄的變革,EFI或者UEFI的到來即將改變世界,從而徹底改變我們對過去的計算機啟動過程的認識.但是我們中國的開發者們仍然在談論JAVA或者.NET,我想,是到了清晰的研究BIOS的時候了.

小生不才,但也願意就我所學,貢獻成一篇簡短的入門文章,帶領大家進入BIOS這個有趣而又充滿了神祕的地域,我們一起來探究BIOS,尤其是探究下一代個人計算機的基礎系統軟體,或者說基礎韌體:UEFI bios的方方面面.由於類似的文章網上也比較多,所以我就重點談些別人一般忽略的部分吧.

BIOS Definitions

BIOS -- Basic Input and Output System,is used for initializing,testing and putting the PC into the ready state so that an OS may be started.Part of the BIOS remains in the system main memory after POST,or Power On Self Test.BIOS provides a consistent software interface to varying types of the hardware devices.It also provides the basic system level services to OS.The BIOS is also used for helping IHV to fix their hardware design bugs by using the SMM mode of the IA architechture.

上面這句話是我在初學BIOS的時候,我的老師,一位受到整個業界尊敬的傑出BIOS Engineer對我說的,這段話雖然短,但是卻清楚的道出了BIOS的基本功能,那就是:

1) 檢測硬體,又叫POST.

2) 初始化硬體,設定其基本狀態,使得整個計算機達到所謂的"可用狀態"(Ready State).

3) 啟動OS Loader載入作業系統.

4) 在作業系統啟動起來以後,一部分繼續駐留記憶體,向作業系統以及其他軟體提供基本的系統級的服務.如磁碟讀寫等.

5) 修復硬體缺陷.

下面我們一個一個的來看這些功能.第一個檢測硬體可能比較好理解一點,就是看看你的硬體是否還正常的工作,但是從軟體的角度看.其中最重要的就是對記憶體的檢測的.大家都還對剛開機的時候記憶體的大小一直在跳的螢幕有記憶吧,那就是在做Memory Test,或者說Memory Sizing.

第二個功能是初始化硬體,可能有不少朋友問:為什麼我的硬體還需要初始化?問的好,硬體的設計廠家往往為了通用市場的考慮,不願意將硬體設計成定製的狀態,可能一個網絡卡,可以安裝在PC,同樣也可以安裝在嵌入式系統上.所以為了使得硬體能夠按照PC的架構工作,BIOS必須要按照由IHV(Indenpendent Hardware Vendor)提供的手冊將硬體設定好,比如寫幾個必須的暫存器之類的,做一些enable的工作.這點非常重要,如果一個硬體沒有enable,那麼在OS下將不可見.

第三個功能是啟動作業系統,這也是BIOS必須要做的事情之一.啟動的方式是由BIOS規定,作業系統必須按照BIOS的要求來設計.這也是為什麼作業系統從DOS一直到Vista,都只能把自己的loader放在MBR,因為BIOS只讀MBR.強大的微軟都必須要按照這個不成標準的標準來:)當然,在EFI時代,這一點有所改變,EFI支援的Boot From File不在需要MBR.


第四個功能可能之前作過DOS開發的朋友比較熟悉吧,還記得INT 10基本螢幕服務,INT 13磁碟服務嗎?多少病毒正是靠INT 13來傳播.又有朋友曾經試圖繞過INT 10來直接寫屏?Windows時代,這些東西事實上仍然存在,並且繼續發揮著基本的核心作用,只是他們被Windows包裝起來了,一般的程式無法接觸到,但這並不能說明他們就沒有用處了.MS的開發人員不久前還表示,事實上甚至就是開發中的Longhorn的安裝程式,目前仍然有許多code是基於INT 10來寫屏的.

第五個功能估計一般的朋友可能就不知道了,就是之前稍微接觸過BIOS的朋友們可能也是第一次聽說吧!Intel在它的CPU裡專門留了個模式叫System Managment Mode
,擁有最高的許可權.SMM中斷的時候,就連號稱無所不能的Windows的也不知道,這樣就可以給CPU補bug了,舉個例子,比如某天Intel的一個CPU對ADD指令給出錯誤操作結果,那麼就可以利用SMM在每次執行這個指令的時候,中斷一下,由BIOS軟體給出正確的執行結果.這就達到了給硬體修復缺陷的目的.這樣Intel也不用招回它的CPU了,呵呵.此外,每次BIOS開機的時候,事實上都會更新CPU Microcode,同樣是用來給CPU補bug的.所以很多時候,刷BIOS刷出問題,事實上某個CPU的bug沒有補上導致出了問題出現.



BIOS在哪裡

上面羅嗦了一大堆的BIOS Basics,那麼BIOS到底在哪裡呢?答案是在你的計算機裡:) 的確有些無聊,事實上BIOS有三種狀態,分別是:

1) Before Build

2) BIOS Image

3) BIOS Runtime

第一種呢,這個時候BIOS表現為BIOS開發者硬碟上的一堆原始碼.處於第二種的時候,BIOS則是沉睡在Flash裡的一段image.BIOS真正發揮作用是在第三種模式下,哪個時候BIOS執行,控制系統,與作業系統互動.



EFI BIOS

EFI是由Intel提出的,目的在於為下一代的BIOS開發樹立全新的框架。EFI是英文Extensible Firmware Interfaces的縮寫。正如它的名字一樣,EFI不是一個具體的軟體,而是在作業系統與平臺韌體(platform firmware)
之間的一套完整的介面規範。EFI定義了許多重要的資料結構以及系統服務,如果完全實現了這些資料結構與系統服務,也就相當於實現了一個真正的BIOS核心。

EFI最早是在Spring 2000 IDF(Intel Developer’s Forum)上提出的,當時Intel認為,隨著IBM在80年代初推出了第一臺個人計算機開始,直到今天為止,個人計算機硬體平臺已經發生了翻天覆地的變化,相關的系統軟體如作業系統等也從最早的MS DOS1.0到今天的Windows XP,而作為整個系統的最底層也最為關鍵的系統軟體之一的BIOS卻基本上保持了架構二十年不變。這在整個軟體史上都是一件不可思議的事情。如今,BIOS已經變成了嚴重阻礙IT產業前進的絆腳石,必須通過對BIOS的革新來為下一代的作業系統(如Windows Server Longhorn)提供更加強大的支援。

上面是我很早之前寫的一段對EFI的介紹,現在看來,難免有些錯誤,不過大致意思非常明確,EFI就是用來替換傳統BIOS.作為更好的BIOS,EFI可以提供過去無法在BIOS中作到的許多事情.後面的文章我會逐步展現給大家.


一些常見的關於BIOS/EFI的問題以及我的簡短回答:
1) BIOS一般有多大?
傳統bios(以後說legacy bios)一般都是512KB,而早期的EFI bios也是512KB.現在EFI基本上是1MB了.

2) BIOS用什麼工具開發?
legacy bios一般用MASM 6.11開發,同時還會配上一些廠商自己寫的buid tools. EFI則使用Viusal Studio.NET 2003以及MASM 6.11開發(沒想到吧~)

3) EFI boot是怎麼一回事?
EFI有自己獨特的boot方式,完全拋棄掉了傳統的0磁軌0扇區的MBR概念.EFI的boot方式與檔案系統息息相關.過去的legacy bios由於不帶檔案系統,不得已選擇從硬碟上特定空間裝載程式的辦法,而EFI則附帶了完整的檔案系統支援,所以不再對硬碟有特定的要求,EFI下的作業系統載入程式事實上儲存在boot\ia32\bootia32.efi檔案裡.(假定是IA32架構).這是一個EFI應用程式.


下面是一些深入學習bios的資源彙總:
1. BIOS Boot Specification
業內一般叫BBS,詳細描述bios啟動時必須要做的所有事情,如何區分啟動裝置,如何選擇啟動裝置等等.
http://www.phoenix.com/NR/rdonlyres/56E38DE2-3E6F-4743-835F-B4A53726ABED/0/specsbbs101.pdf

2. UEFI Specification
UEFI規範,詳細描述了UEFI bios必須支援的介面.以及UEFI bios的模型,提供的服務等等. 開發UEFI必備的.
http://www.uefi.org

3. Ralf Brown's Interrupt List
這個人似乎就一輩子都都在收集中斷的東西,對legacy bios學習很有用.
http://www.ctyme.com/rbrown.htm

4. El Torito CD-ROM Boot
描述了bios如何從光碟機上boot的細節.
http://www.phoenix.com/NR/rdonlyres/98D3219C-9CC9-4DF5-B496-A286D893E36A/0/specscdrom.pdf

5. USB Specification
USB裝置規範
http://www.usb.org

6. Plug-and-Play Specifications
MS的PnP規範
http://www.microsoft.com/hwdev/tech/pnp/default.asp

7. BIOS Writer's Guide
bios開發的聖經,由cpu廠商給出.Intel的絕對看不到,Intel的是絕密級的文件.AMD的倒是可以看到,不同的cpu有不同的BWG.這裡給出一個amd比較新的cpu的BWG:
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/31116.pdf


還有很多很多相關的文件.其實編寫bios最難的在於同時支援業界幾乎所有的通用規範.

轉載自:https://www.cnblogs.com/kuwoyidai/archive/2010/07/10/1777534.html