02_基本的UEFI架構

转自:http://blog.yam.com/wttmama/article/33757450

在 EFI 中,有一些基本的觀念必須先建立
先知道一些觀念、結構,有助於後續的理解。


幾個EFI的重要角色要記得

1. System Table : 含有很多重要的資料結構以及系統 function 的 interface。
2. Handle Database and protocols : 很多資源及概念的 reference ,是被註冊在此處。
3. EFI Image : 在 driver 還沒 dispatch 前,都是屬於 image 的存在。是一種 PE/COFF的格式。存在ROM中
4. Event : 在 EFI 中,含有許多 Events 可供使用
5. Device Paths : 在 EFI 中,對於 Device 的表示,都是使用 Device Path 來進行表示。

以下來分別解說這些重要角色

1. System Table 

它是一個 DXE 時建立的 Table 。它內含幾個重要的東西
  a. Boot Services
  b. Runtime Services
  c. Protocols Services

這些東西都可以從 System Table 找到相關 reference 。
最簡單的分類方式是
Boot Service 是在 未進入 OS前( 還沒call ExitBootSerivce)前可使用的。之後就不能用了
Runtime Service 則在 進入 OS 後還可以使用的。
Protocols Service 則是給 Driver 使用的,可以註冊 Handle , Routine …等等

2. Handle Database and protocols
當 Dxe Driver 利用 Protocol Service 註冊想開放的功能,它是以 Handle 的方式來儲存。
此 Database 是儲存的媒介。取得也是利用 Protocols Service 來查詢。
因為是查詢,使用方必須知道相關的 data structure 才能正確的使用開放的 Handle( 轉型 )
而內部主鍵則是利用 GUID 來分別各 Handle (GUID很難重覆)
Handle 是由 一個或多個 Protocol 組成的( 因為Protocol是掛在Handle上的)
Protocol 本身則以 GUID 為身份代表,開放一些 Interface 。

3. EFI Image
含有 PE/COFF Format 的 Header 。目前有以下類型的 EFI Image
  a. EFI Application : resource 在退出 app 時 release
  b. EFI Boot Service Driver : resource 在 ExitBootServices後release
  c. EFI Runtime Driver : resource 會一直存在
這也代表,使用這些格式的 Image 就可以被 EFI 所使用,而不依賴處理器。( 多了一層在處理這東東)

4. Events
Event 是 EFI 所管理的。使用者可以使用它來組合自己想做的事。
以下是 Event 的分類
 a. Wait Event
 b. Signal Event
 c. ExitBootServices Event
 d. Timer Event
 e. Periodic Timer Event
 f. one-shot timer Event

在概念上,它都必須建立一個 Event 再由 丟到 Event Service 去做你需要的安排。

OK,以上是純文字說明,接下來補一些圖片幫助理解
1. System Table
這個東西,重要的是它的存在,以及什麼東西可以透過它找到。
以下是它的結構

藍色那塊就是 Boot Services
暗紅那塊就是 Runtime Services
以及其它可供擴充的 Configuration Table ( 忘了它沒關係…有用到再說 )

2. Handle Database  and Protocols
這東西,想像成一種小管理系統。
它長的像下圖

一個 Handle 跟著一個 Handle
而每個 Handle 由一個或多個 Protocol 組成
而 Protocol 是由 GUID 所代表。
那 Protocol 又是啥東東?
看下圖


其實就是 會參考到 某 Driver 願意分享出來的 function 。
它是一組 reference 。如果你有OO的概念的話,那應該更會有這個FU。

而 Handle 本身,還是有分類的。
所有存在 ROM 裡面的 Image file, 在載入後,都會變成一個 Image Handle
而 Driver 被 dispatch 後,則是看它本身的內容看要不要再產生新的 Handle 
目前已知的是
 a. Driver Handle ( 符合 EFI Driver Model )
 b. Service Routine ( 這個產生出的 Handle 沒啥意義,重要的是它要分享 Service )


4.  Image 
Image 本身指的是符合 PE/COFF 格式的 Image file
Image 依它自己的目的,是可以有以下幾個分類的。

這邊要說明一下
Handle 是 EFI Framwork 自行建立的 Reference ,是動態建立的。
而 Image 則是本身就存在 ROM 或是其它 Storage 中。可以透過 LoadImage 讀出來
透過 Dispatch 執行該 Image。
下圖的分類,指的是該 Image 本身的意義所造成的分類。

5. Events
這邊要補充的是, Wait Event , Signal Event 是基本型態
其它 Event 就是如圖上看到的,是其它 Event 的延申。

ok
說完了。
這邊主要參考的是 Beyond BIOS 的內容,抽我覺得要說的打的。

這裡的重點在於,EFI 基本上有啥,點出來,在應用的時候,你的概念可以連起來
就這樣子而已,很多東西還是必須實作才有 FU,不然,這些概念就夠了。

你可能感兴趣的:(02_基本的UEFI架構)