UEFI - PEI Phase

PEI PhasePre-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:走訪FVFFS(Firmware File System)去找出PEIMs,並找出位在Flash deviceFirmware 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,他PEIMdependency expression會被評估成true,代表所屬的PEIMs已經可以被dispatch。在PEI dispatcher評估過全部FV裡頭所有PEIMdependency expression發現全部都是FALSE以後,代表已經沒有PEIM可以被dispatchPEI dispatcher結束,在來PEI foundationcontrol fowardDXE IPL PPI,進入DXE phase


留言