天天看點

Foxdisk04-啟動原理1

(請保留 -> 作者:羅冰 )

我不記得是哪個獨幕喜劇了,趙本山用他的标準鐵嶺國語說:“我不想知道它怎麼來的,我隻想知道它是怎麼沒的。”

對程式設計而言,“怎麼來的”實際上非常重要,不能不了解。Foxdisk的啟動過程,在“如何安裝1”中已經有了說明,本篇會盡量的把相關的背景知識介紹清楚。

有幾個關鍵詞:BBS、Legacy BIOS、UEFI、MBR。

BBS

英特爾、Phoenix和康柏公司在1996年聯合釋出了BIOS引導規約(BIOS Boot Specification),簡稱BBS(圖2)。盡管十幾年已經過去了,但是這個規約中的大多數内容至今仍被使用着。本文中使用的很多術語和資料結構都來自這個規約。

Foxdisk04-啟動原理1

 圖1 BIOS Boot Spec

BBS将引導裝置劃分為以下三種類型:

BAID – 即BIOS知道的IPL裝置(BIOS Aware IPL Device),也就是說BIOS中已經為這樣的裝置準備了支援引導的代碼。第一個軟驅、第一個硬碟、ATAPI接口的光驅等都屬于這一類型。

傳統裝置 – 是指帶有Option ROM(見下文)但沒有PnP擴充頭的标準ISA裝置。例如已經過時的通過ISA卡連接配接到系統中的SCSI硬碟控制器。

PnP裝置 – 是指符合PnP BIOS規約(Plug and Play BIOS Specification)的即插即用裝置。

第二類裝置對很多人來說已經很少見,可是對我來說,幾乎天天都要處理這樣的産品。隔離卡就是一個帶有Option ROM的Pnp裝置,上面的代碼已經被我不知道折騰過多少次了。

不用了解得太複雜,簡單來說,具有符合規範Option ROM的Pnp裝置,BIOS會在某個階段把控制權轉交給它。所有隔離卡、還原卡以及一些類似的安全産品,都是基于此原理來建構的。

Legacy BIOS&UEFI

網上有太多關于這方面的介紹,我站在Foxdisk開發的角度來談我的想法。Legacy BIOS大部分都是用彙編寫的,對工程師來說那絕不是一個輕松的活。我曾經因工作原因在QDI(已經被記憶科技收購)待過一段時間,天天看着BIOS工程師一點點的除蟲,深感不易。我最多的工作是在Legacy BIOS上開發Option ROM,或者開發Oprom嵌入到BIOS中,是以不得不深入去了解它的工作原理。确實能讓人對X86有很好的感覺,但僅此而已。為了當時的工作,必須大量的記住各種指令,不停的翻查各種古老的資料。這就是在Legacy BIOS上進行開發給我的感受,我認為确實應該讓它退出曆史舞台了。

UEFI系統的固件就相當于一個簡單的作業系統,在開機程式完成後,使用者可選擇執行UEFI Shell當做指令接口,或指定任一其它作業系統。這種情形就有點像早期的DOS一樣,Windows隻是另一個使用者接口系統。包括AMI和Insyde,現在的UEFI BIOS都是以Intel所撰寫的UEFI功能核心Framework(開發代号為Tiano)為基礎,再加挂其編寫的架構子產品。

我大概從2011年初開始,也是因為工作原因,需要寫UEFI Oprom、shell app什麼的,花了不少時間學習它。當時甚至起過把Foxdisk移植到UEFI shell下的想法,不過動力不足,就留到了現在。

 MBR

主引導記錄(MBR,Main Boot Record)是位于磁盤最前邊的一段引導(Loader)代碼。它負責磁盤作業系統(DOS)對磁盤進行讀寫時分區合法性的判别、分區引導資訊的定位,它由磁盤作業系統(DOS)在對硬碟進行初始化時産生的。

這是Legacy BIOS時代的遺産。現在的BIOS慢慢的都變成了UEFI BIOS,不過因為曆史原因,都會支援Legacy啟動方式,是以MBR還會存在一段時間。BIOS在啟動引導裝置時,會将MBR代碼(位于LBA 0)加載到記憶體0x0:7c00處,并把控制權轉移過去。

好,介紹到此處,可以去了解Foxdisk的原理了。

Foxdisk把MBR改為自己的代碼,我們暫且取名為Loader,此段代碼位于Loader.asm中。Loader用來加載放在硬碟末端的Foxdisk代碼,代碼段加載到0x7000:0,資料段加載到0x8000:0中。在進行一些簡單的校驗之後,通過retf指令,遠跳轉到Fxodisk.c中的BootEntry。從這兒開始,才算是搭建好Foxdisk的工作舞台。

文中介紹的知識,有些文檔很有幫助,估計現在網上也很難找到,我就把連結放到這裡了。包括:Pnp BIOS spec 1.0a, BIOS Boot Spec 1.01, PhoenixBios 4.0 User’s Manual, BIOS Enhanced Disk Drive Spec 3.0。

https://download.csdn.net/download/luobing4365/11662442

繼續閱讀