02_基本的UEFI架構

news/2024/7/8 15:35:20 标签: protocols, image, service, reference, database, table

转自: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,不然,這些概念就夠了。

http://www.niftyadmin.cn/n/1516366.html

相关文章

03_PEI_Phase

转自:http://blog.yam.com/wttmama/article/33760946 PEI Phase 是我第一次追 EFI 的 code 。 第一次看其實霧傻傻的~PEI Phase 在原版的 EDK 中,就已經存在的 code 它可以當成是 EFI Framwork 的一部份。下圖是是所有的 Phase ,應該很容易…

Maven简介(六)——Dependency

尊重原创,原文链接 7 Dependency介绍 7.1 依赖的传递性 当项目A依赖于B,而B又依赖于C的时候,自然的A会依赖于C,这样Maven在建立项目A的时候,会自动加载对C的依赖。 依赖传递对版本的选择 假设A依赖于B和C&…

04_PEI之InstallPpi演算法

转自:http://blog.yam.com/wttmama/article/33762035 m,這部份是第一個理解的東西 但,說真的,它對BIOS 真的沒幫助,只能幫你瞭解 PEI 的 IntallPpi 是怎麼做的而已。這個內容可以套用在InstallPpiLocatePpiNotifyPpi…

Maven简介(七)——整合Eclipse

尊重原创,原文链接 8 Maven整合Eclipse Maven整合Eclipse就是在Eclipse中安装Maven的插件,这样我们就可以直接在Eclipse上使用Maven,而不需要去命令窗口敲Maven命令了。有两个Maven插件我们可以用来整合Eclipse,实际应用中安…

05_DXE_Phase

转自: http://blog.yam.com/wttmama/article/33762726 這次要說的是 Dxe Phase 了。 這部份說真的,也花了我不少時間看。主要還是在於瞭解它的思路和架構。又要套用這張圖了。看看上圖的 DXE 在做啥…Intrinsic Service … ( 應該是 Dxe Foudation )再…

Python包管理工具

尊重原创,原文链接 在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。 例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index&#xf…

python中collections模块_Python collections模块使用方法详解

一、collections模块1.函数namedtuple(1)作用:tuple类型,是一个可命名的tuple(2)格式:collections(列表名称,列表)(3)​返回值:一个含有列表的类(4)例子​:import collections# help(collections.namedtupl…

06_DXE_InstallProtocolInterface

转自:http://blog.yam.com/wttmama/article/33768917 這是一個本來看不懂的東東 後來去追了裡面的 code 。m,真的很特別,但~我要強調,它不能讓你瞭解BIOS 但可以讓你對 程式更有 sense 。要看懂 InstallProtocolInterface 這個 …