PEI Phase(Pre-EFI Initialization Environment)
Why??
1. 因為所有Code都沒經過Compress,會有Rom size 的問題
2. Memory 還沒Initialize
3. Chipset 還沒Initialize
Task
1. CPU Cache Translation
a. 切換Stack到真正的Cache (Disable Cache As Ram And Enable L1 L2 Cache)
2. Chipset Initialization
a. Platform Chipset Initialization
b. Memory Initialization
3. Board Initialization
a. Clock Initialization
b. GPIO Initialization
4. BIOS Recovery
5. S3 Resume
6. 啟動DEXIPL (DXE Initial Program Loader)
Component
1. PEI Foundation (exist in BFV)
a. Dispatching PEIM
b. Maintaining the boot mode
c. Initialize permanent memory
d. Invoking DXEIPL
2. PEIM Service
PEI foundation建立一個system table叫做PEI service table,是可以被所有的PEIMs所存取的。因為記憶體的空間只有在PEI最後的階段才可以使用
a. PPI Service:管理PPI並在必要時,從temporary ROM裡頭的database呼叫他。
b. Boot Mode Services: 管理系統的boot mode( s3, s5, normal boot, diagnostic, etc.)
c. HOB Service: 創造一個HOB的資料結構,並傳到下一個DXE階段。
d. Firmware Volume Service:走訪FV的FFS(Firmware File System)去找出PEIMs,並找出位在Flash device的Firmware file。
e. PEI memory Service:提供記憶體管理的服務在初始化記憶體以前,或是以後。
f. Status Code Service:提供錯誤回報的服務,例如:port 80h。
g. Reset Service:提供cold or warm系統的重啟動。
h.
3. PEIMS (Exist in FVs)
Executable Binaries – Process , Chipset , Device or other Platform 指定的function
4. PEIM to PEIM interface (PPI) => Data Structer EFI_PEI_PPI_DESCRIPTOR:由GUID和一個Pointer 組成,PEIM 彼此Communicate 的Structure
5. PEI Dispatcher
這是在PEI foundation裡頭的一個state machine,他會衡量每個FV裡頭的PEIMS之間的相依性。決定哪些PEIMS應該要先Dispatch。而他們之間的相依性
是由PPIs所決定,PPIs裡頭敘述了PEIMs之間的相依性。
再一開始的時候PEI dispatcher會去PEI foundation裡頭的PPI Database檢查哪些PPI已經被install如果已經被install,他PEIM的dependency expression會被評估成true,代表所屬的PEIMs已經可以被dispatch。在PEI dispatcher評估過全部FV裡頭所有PEIM的dependency expression發現全部都是FALSE以後,代表已經沒有PEIM可以被dispatch,PEI dispatcher結束,在來PEI foundation把control foward給DXE IPL PPI,進入DXE phase。
留言
張貼留言