PEI (Pre-EFI Initialization Environment)
PEI (Pre-EFI Initialization)是整個開機階段(Boot Flow)的第二步,主要內容包含了初始化永久的記憶體、將Memory,FV location等資訊準備好後透過HOBs (Hand-off Blocks)傳送給DXE階段、把控制權傳送給DXE、根據SEC階段所回傳的Boot Mode執行Crisis Recovery,S3 resume or S5 normal boot。
Task
- Establish use of "memory" - 畢竟C語言在硬體架構的通用性還是比組合語言佳,為了使後續的Component Link或者Function Initial更加順利,我們要在PEI階段就立刻初始化永久記憶體。
- PEI Dispatcher - PEI Foundation內的一個state machine,主要會衡量每個FV (Firmware Volume)內的PEIMs之間的相依性,根據這些相依性來決定哪些PEIMs應該要先被Dispatch,而PEIMs之間的相依性主要是由PPIs內的敘述所決定。起初PEI Dispatcher會從PEI Foundation內的PPI Database檢查哪些PPI已經被Install,已經被Install的PPI會在所屬的PEIM內的Dependency Expression註冊為True,代表所屬的PEIM已經可以被Dispatch,Dispatch完成後再修改為False。當PEI Dispatcher確認FV內所有的PEIM的Dependency Expression都已經為False時宣告PEI Dispatcher結束,表示已經沒有PEIM需要被Dispatch。最後,PEI Foundation會把控制權轉交給DXE IPL的PPI,隨後進入DXE階段。
從Beyond_BIOS_Second_Edition_Digital_Edition_(15-12-10) 所節錄的PEI流程圖: