UEFI的學習

UEFI是從legacy BIOS發展而來,leagcy BIOS主要是彙編語言,而UEFI大部分是C語言,另爲有百分之一是彙編和機器碼,現在在UEFI code中是加入一個CSM module(裏面的AmiLegacy16.bin實際上就是legacy BIOS rom),UEFI是一個技術論壇組織,Aptio是AMi的UEFI產品,Tinao是Inter的UEFI產品,到底還有哪些UEFI產品呢,我也沒搞清?哪位大俠知道就給說明一下。

UEFI主要分爲4個階段:

1)SEC,Security的縮寫,它是平臺信任鏈的根,

主要完成的是CPU的基本初始化(進入保護模式,MTRR,MP,CAR等),轉移到C環境(CAR提供C環境所需要的棧),最後將控制權交給PEI  core,所謂的控制權就是BFV及CAR的Size和Baseaddress(在code中的sdl文件中有定義,CAR的大小與FV_BB相當);

2)PEI:即Pre-EFIInitialization,完成CPU,基本的Chipset的初始化,切換棧從CAR到Memory上(需要disabled CAR,同時enabled cache),決定Boot mode,是normal boot還是Recovery boot或者是S3 resume,對於服務器而言,不需要有待機的sleep status,因此取消了S3 resume,只有S0和S5,最後要做的就是啓動DXELPL,它是最後一個PEIM;

PEI階段需要注意的幾個名次:PEI core(主要的PEI執行文件,負責dispatch PEIM且提供基本的服務),PEIM(PEI module),PPI(PEIM to PEIM的Interface,允許一個PEIM去調用另一個PEIM);

PPI有四個常見函數:InstallPPI(安裝PPI到PPI LIST),ReinstallPPI,NotifyPPI(PPI第一次被安裝後由於條件不滿足沒有被執行,等條件滿足後纔再次被調用),LocatePPI(查找PPI);

3)DXE:Run所有的DXE Drivers,使其進入準備狀態,(DXE階段的Driver與Chipset的初始化相關,建立並提供EFI框架的主要界面),Bind EFI1.1 Driver(在BDS階段纔會被用到,一般先掛在系統上,到BDS階段用到的時候才根據需求connect到device handle上);檢查Architecture Protocols是否都安裝(在DXE階段install protocols和invoke protocols),啓動BDS;

DXE階段的kernel和硬件沒有關係;

4)BDS:啓動必要的驅動程序(PCI設備的遍歷,併爲遍歷的設備加載oprom,如VGA、PXE、RAID等,boot device的初始化),進入Setup,選擇要boot的OS device(UEFI OS還是legacy OS),

SEC和PEI的code(在ROM中的位置是FV_BB)沒有被壓縮,code在rom上執行,執行效率低,因此code越短越好;

DXE和BDS的code(在ROM中的位置是FV_MAIN)是被壓縮的,code須解壓在memory上執行(memory已被完全初始化,可以使用所有的memory資源)



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