转自: http://blog.yam.com/wttmama/article/33762726
這次要說的是 Dxe Phase 了。
這部份說真的,也花了我不少時間看。
主要還是在於瞭解它的思路和架構。
又要套用這張圖了。
看看上圖的 DXE 在做啥…
Intrinsic Service … ( 應該是 Dxe Foudation )
再來還是一樣,Dispatch ,Dispatch Device , Bus or Service Driver。
然後進入 Boot Manager ( BDS Phase )
這張圖真的很好用吧?mm…
接下來導入正題…
從 PEI -> DXE 到底做了什麼事,DXE 本身又做了什麼事呢。
一樣,看圖吧,如下圖
這一張,真的是好圖,它表現了很多事。
1. PEI 會留下 Hob 給 Dxe Foundation 使用( 圖有 ,也可以看 PEI Phase 說明 )
2. Hob 本身含有重要的 Information ,一樣如圖
3. Dxe Foudation 和 Dxe Drivers 透過 Achitecture Protocols 和 Motherboard 溝通( 其就是指硬體的意思 )
換句話說~ Dxe Foudation 其實是 Depend on Hob 的。這很重要,這樣才能安排 Resource。
而 Dxe Foudation 到底有什麼東西,之前其實大概有說過,會建立 System Table
而 System Table 有什麼東西呢?如下圖所示
a. Boot Service Table
b. Runtime Service Table
c. Configuration Table
d. Active Consoles
其中,最重要的,其實就是 Boot Services, Runtime Services ,及可以透過 Boot Serivices Access的Handle Database 。
1. Boot Services
可以看到它含有很多 Service ,其中 之前提到過的 Event , Timer , Image Serives
還有,Memory Service。都是寫 Dxe Driver 不可或缺的 Services 。
2. Runtime Services
其中最重要的應該就是 Variable Serives 用來存 non-Valitile Data。
3. Dxe 必須含有的 Dispatch Services。
還有其它拉里拉喳…
有一張圖,其實有大概含入 Foudation 需要啥,如下所示,其實剛好就是System Table藍底的部份
還有一張圖,也算是蠻經典的
暗紅色,其實就是 System Table 可連到的 Architecture Protocols 。
而比較特別的是 Configuration Table ( 看 System Table 那張圖 )
其實是可以放自己喜歡的東西,是可擴充的。還不錯,目前是沒塞啥,但是~如果你有擴充需求
是可以放 reference 在這裡的。
整個 Dxe Phase 花了不少 code 在 Initialize 。
然後會進入 Dispatch 。
Dispatch 在 Dxe Phase 就很講究了,這又要看 PI Spec 了,裡面有張圖如下
一個 Dxe Driver 它的週期就是這樣,特別的是它的 Dependence 是用 recursive 來做的。
這裡的 Dxe Driver 也是要從 FV 找。
但這裡的 Firmware file 是有壓縮的。( Foudation 有提供解壓縮 )
當 Dispatch 完畢後,就會把 Boot Manager 這個 Dxe Driver 拉出來進入 BDS
其實做的大項目事情和 PEI 很像, Initialize , Dispatch , next Step 。
但它很聰明的分開了,以責任的方式分開了。
而這一段的目的是什麼?別忘了,看圖
應該有 fu 吧?
目前談到的是 Dxe Phase 在 Framwork 中,做了什麼。
但很多事沒談到,這裡稍為寫一下…
1. EFI Driver Model
1.1 Device Driver
1.2 Bus Driver
1.3 Device Path 的說明
1.4 Driver Binding Protocol 。
2. 這一階段的 Driver 都在做啥?
這其實就是接下來要研究的東西,每一個 Driver 都是一個課題。
3. 重要的 Dxe Serivce
4. BDS 其實還是在 Dxe Phase 裡,但它是 DXE 的最後一部份了。
5. SMM Mode, SMI
6. CSM
7. ACPI