UEFI Boot Flow 系列之PEI

轉自CeliaQianhj

PEI:Pre-EFI Initialization

爲什麼要有PEI Phase?

1. ROM空間的問題,所有的Code都沒有壓縮

2. Memory還沒有初始化

3. Chipset沒有初始化

PEI Phase的特性:

1. 在ROM上執行

2. 都是沒有被壓縮的代碼

3. PEI Core與硬體沒有關聯

PEI Phase的任務:

1. 基本的Chipset初始化

2. Memory Sizing

3. BIOS Recovery

4. S3 Resume

5. 切換Stack到Memory (Disable CAR, Enable Cache)

6. 啓動DXEIPL(DXE Initial Program Loader)

PEI Phase包含的兩個部分:

1. 一個PEI Foundation,存在於BFV。

2. 一個或多個PEIMs(Pre-EFI Initialize Module),存在於FVs。

一、關於PEI Foundation

PEI Foundation存在於FV0(即BFV),它是在SEC階段被發現並通過驗證的,這也就允許PEI階段能夠確定FV文件有沒有被破壞掉。

PEI Foundation負責:

1. Dispatching PEIM

2. Maintaining the boot mode

3. Initialize permanent memory

4. Invoking DXEIPL

PEI Services

PEI Foundation建立了一個system table叫做PEI Services Table,它對所有的PEIM都可見。PEI Services的分類有:

二、關於PEIM(Pre-EFI Initialization Modules)

PEIM就是一些可執行的二進制代碼,它封裝着一些關於Processor,chipset,device或者是平臺相關的一些功能。由PEI Foundation負責來Dispatch這些PEIMs。

大部分的PEIM都存在於ROM上,它們是沒有被壓縮的,只有極少數的PEIM爲了提高性能而存在於RAM上,是被壓縮的。

因爲PEI Phase存在的環境只有極少的Hardware Resource可用,且PEIM大都位於ROM上,所以強烈建議PEIM只做儘可能少的,不得不做的工作來滿足DXE階段執行的要求。

PPI(PEIM to PEIM Interface)

PEIM與PEIM溝通是通過PPI,即PEIM to PEIM Interface。PPIs包含在數據結構EFI_PEI_PPI_DESCRIPTOR中,由一個GUID和一個指針組成。

一個PEIM通過PEI Service InstallPPI()和ReinstallPPI()來發佈一個有效的PPI到PPI Database;

其他的PEIM通過PEI Service LocatePPI()來找到相關的PPI。

PEI Phase 代碼流程圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章