02 基本的UEFI架構

2021-09-30 09:51:22 字數 3031 閱讀 9953

**:

在 efi 中,有一些基本的觀念必須先建立

先知道一些觀念、結構,有助於後續的理解。

幾個efi的重要角色要記得

1. system table : 含有很多重要的資料結構以及系統 function 的 inte***ce。

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 為身份代表,開放一些 inte***ce 。

3. efi image

含有 pe/coff format 的 header 。目前有以下型別的 efi image

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 。

而 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

1.新 的定位 一開始就有系統結構清晰的總體檢視,所以,新的功能單元可以新增到正確的功能區域,而不是為了一時方便,隨意新增。這樣,有的時候開發者的工作會需要動寫腦筋,但是在系統維護和擴充套件時,就變得容易了 2.系統的一致性 頂層設計的良好風格和決定,為底層 好處,是統 一 整潔的。清晰的定義,確保...

從Uefi的歷史開始 BIOS和Uefi

legacy bios可以引導不同的作業系統,它定義了一套與作業系統無關的硬體介面,通過bios rom loader和 bootstrap loader去使能中斷和video,disk,keyboard服務進行通訊。uefi是用來代替legacy bios的服務。除此之外,uefi還提供了其他的一...

02 numpy 02 陣列的基本運算

在numpy中實現四則運算,既可以使用符號,也可以使用函式 比較運算返回的是bool型別的值,即true 或者 false 比較運算用來篩選出特定的值或者對這些值進行一些操作 import numpy as nparr np.array 1,3,4 5,6,7 3,3,9 arr1 np.array...