UNIQLOCK

2010年9月16日 星期四

PEI Phase


PEI phase

PEI的階段主要負責下列的事情。
1. 在記憶體初始化的前後做一些routine
2. HOB的資訊交代好,如:memory, FV location
3. 把控制權交代到DXE階段。
4. crisis recovery and S3, S5, normal boot
因為這些重要的因素,所以PEI要求被放在fault-tolerant FV

PEI Service

PEI foundation建立一個system table叫做PEI service table,是可以被所有的PEIMs所存取的。因為記憶體的空間只有在PEI最後的階段才可以使用,所以PEI所可以使用的資源比起後面的DXE phase變的非常的有限。因為PEI foundation和暫時可以使用的RAM,在build time並不知道,所以PEI service table的指標必須要passPEIMs entry point,同時也是PPI的一部分。

PEI foundation提供以下的服務。
1. PPI Service:管理PPI並在必要時,從temporary ROM裡頭的database呼叫他。
2. Boot Mode Services: 管理系統的boot mode( s3, s5, normal boot, diagnostic, etc.)
3. HOB Service: 創造一個HOB的資料結構,並傳到下一個DXE階段。
4. Firmware Volume Service:走訪FVFFS(Firmware File System)去找出PEIMs,並找出位在Flash deviceFirmware file
5. PEI memory Service:提供記憶體管理的服務在初始化記憶體以前,或是以後。
6. Status Code Service:提供錯誤回報的服務,例如:port 80h
7. Reset Service:提供cold or warm系統的重啟動。

PEI foundation (reside in Boot Firmware Volume, BFV):
是一個image。主要有四種功能。 
1. 成功的dispatch PEIMs .
2.維護boot mode  
3. 初始化memory   
4.呼叫DXE loader
PEI foundation 是與底層硬體有關的一層。他專門處理和指令集相依的平台結構,並且提供統一的介面給PEIMS c語言跨平台使用。
例如: IA-32平台有相對的PEI Foundation binaryItanium processor有相對應的 PEI foundation binary

PEIMS (Pre-EFI Initialization Modules)
PEIMs他類似DXE driversDXE層扮演的角色。是由PEI Foundationdispatch。在memory pool的環境裡,PEIMs是很難進行溝通的。因此在PEI裡頭提供
了一個機制讓PEIMs可以呼叫其他PEIMsinterface( PPIs )。在PEI的環境裡,我們盡可能的使用最少的資源來完成必要的工作。雖然PEIcodeSECcode
沒有編譯在一起,但是有定義說PEI foundation要放在FV0也就是BFV的地方,這樣SEC最後才能喚起PEI foundation

PPIS ( PEIMs to PEIMs Interfaces )
PPIsEFI_PEI_PPI_DESCRIPTOR的資料結構裡頭。他的指標包含了指向這個資料結構和service set的用途。 
有分做兩種:
1. Architectural PPI:提供介面給PEI foundation做使用。  
2. Additional PPI:PEIMs之間溝通所使用。
PPIs是放在相對應的PEIMs裡頭。當我們要做一個PPIs給其他程式使用時使用InstallPpi() or ReinstallPpi()
若是要使用別的PEIMsPPIs時使用LocatePpi()找出相對應的PPI

PEI Diapatcher
這是在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 forwardDXE IPL PPI,進入DXE phase

轉自  bboy的筆記本

沒有留言:

張貼留言