2.UEFI四個階段(二)

SEC--PEI--DXE--BDS


【SEC階段】

1.SEC的功能:

SEC階段是平臺初始化的第一個階段,計算機系統(tǒng)加電或重啟后進入這個階段宵喂。

SEC階段從功能上說執(zhí)行以下任務(wù):

--接受并處理系統(tǒng)啟動和重啟信號朋蔫;

--CAR(Cache as RAM):系統(tǒng)運行在SEC階段時靡挥,僅CPU和CPU內(nèi)部資源被初始化,各種外部設(shè)備和內(nèi)存都還沒被初始化织狐,因而需要一些臨時RAM區(qū)域,用于代碼和數(shù)據(jù)的存确だ铡(SEC最后及PEI階段為C語言環(huán)境移迫,C語言中的局部變量需要堆棧,這一步是為后續(xù)C語言環(huán)境準備好堆棧管行。一句話厨埋,C語言是基于棧的程序設(shè)計),我們稱之為臨時RAM捐顷,以示與內(nèi)存的區(qū)別荡陷。這些RAM只能位于CPU內(nèi)部雨效。最常用的臨時RAM是Cache,當Cache被配置為no-eviction模式時废赞,可以作為內(nèi)存使用徽龟,讀命中時返回Cache中的數(shù)據(jù),讀缺失時不會向主存發(fā)出缺失事件唉地;寫命中時將數(shù)據(jù)寫入Cache中据悔,寫缺失時不會向主存發(fā)出缺失事件,這種技術(shù)被稱為CAS耘沼。

--作為可信系統(tǒng)的根:SEC階段為安全驗證階段极颓,作為取得系統(tǒng)控制權(quán)的第一部分,SEC階段是整個可信任系統(tǒng)的根群嗤。SEC階段能被系統(tǒng)信任菠隆,是其后各個階段被信任的基礎(chǔ)。通常狂秘,SEC把控制權(quán)交給PEI階段前骇径,可以驗證PEI階段。

--傳遞系統(tǒng)參數(shù)給PEI階段:SEC階段的一切工作都是為PEI階段做準備者春,最終要把控制權(quán)交給PEI階段破衔,同時要將現(xiàn)階段的成果匯報給PEI。匯報的手段就是將如下信息作為參數(shù)傳遞給PEI的入口函數(shù):

·系統(tǒng)當前狀態(tài)碧查,PEI可以根據(jù)這些狀態(tài)判斷系統(tǒng)的健康狀況运敢;

·可啟動固件(Boot Firmware Volume,BFV)的地址和大兄沂邸传惠;

·臨時RAM區(qū)域的地址和大小稻扬;

·棧的地址和大胸苑健;

2.SEC階段執(zhí)行流程:

加電-->Reset Vecter-->SEC入口函數(shù)-->PEI入口函數(shù)

以臨時RAM初始化為邊界泰佳,SEC階段又分為兩個部分:臨時RAM生效之前稱為Reset Vector階段盼砍,臨時RAM生效后調(diào)用SEC入口函數(shù)從而進入SEC功能區(qū)、其中Reset Vector的執(zhí)行流程如下:

進入固件入口-->從實模式轉(zhuǎn)換到32位平坦模式(包含模式)-->定位固件中的BFV-->定位BFV中的SEC映像-->若是64位系統(tǒng)逝她,從32位轉(zhuǎn)換到64位模式-->調(diào)用SEC入口函數(shù)

在Reset Vector部分浇坐,因為系統(tǒng)還沒有RAM,所以不能使用基于棧的程序設(shè)計黔宛,所有的函數(shù)調(diào)用都使用jmp指令模擬近刘。


PEI階段

1、PEI的功能:

PEI階段資源依然十分有限,內(nèi)存到了PEI后期才被初始化觉渴,其主要功能是為DXE準備執(zhí)行環(huán)境介劫,將需要傳遞給DXE的信息組成HOB(Handoff Block)列表,最終將控制權(quán)交給DXE案淋。

從功能上講座韵,PEI可分為兩個部分:

--PEI Core Services(PEI Foundation):負責(zé)PEI基礎(chǔ)服務(wù)和流程;

--PEIM(PEI Module)Dispatch:主要功能是找出系統(tǒng)中所有PEIM踢京,并根據(jù)PEIM之間的依賴關(guān)系按順序執(zhí)行PEIM誉碴。PEI階段對系統(tǒng)的初始化主要是由PEIM完成的(CPU初始化、Chipset初始化漱挚、內(nèi)存控制器初始化翔烁、IO控制器初始化渺氧、內(nèi)存初始化等功能)旨涝。每個PEIM是一個獨立模塊,模塊的入口函數(shù)傳入兩個參數(shù)侣背,F(xiàn)ileHandle和**PeiServices白华。通過PEIServices,PEIM可以使用PEI階段提供的系統(tǒng)服務(wù)贩耐,通過這些服務(wù)弧腥,PEIM可以訪問PEI Core。PEIM之間通過PPI(PEIM-to-PEIM Interface)完成潮太。

PPI與DXE階段的Protocol類似管搪,每個PPI都是一個結(jié)構(gòu)體,包含了函數(shù)指針和變量铡买。每個PPI都有對應(yīng)的GUID更鲁,通過PeiService的LocatePpi服務(wù)可以得到該PPI實例。

UEFI一個重要特點就是其模塊化設(shè)計奇钞。模塊載入到內(nèi)存后生成Image澡为,image的入口函數(shù)為_ModuleEntryPoit。PEI也是一個模塊景埃,PEI Image的入口函數(shù)位_ModuleEntryPoit媒至,該函數(shù)最終調(diào)用PEI模塊的入口函數(shù)PeiCore。進入PeiCore后谷徙,首先根據(jù)SEC階段傳進來的信息設(shè)置Pei Core Services拒啰,然后調(diào)用PeiDispatcher執(zhí)行PEIM;當內(nèi)存初始化后完慧,系統(tǒng)會發(fā)生棧切換并重新進入PeiCore谋旦,重新進入到PeiCore后使用的內(nèi)存是我們熟悉的內(nèi)存。待所有PEIM執(zhí)行完后,調(diào)用PeiServices的LocatePpi服務(wù)得到DXE IPL PPI的Entry服務(wù)蛤织,這個Entry服務(wù)實際上是DxeLoadCore赴叹,它找出DXE Image的入口函數(shù),執(zhí)行DXE Image的入口函數(shù)并將HOB列表傳遞給DXE指蚜。

2.PEI階段執(zhí)行流程:

PEI入口-->初始化PEI Core Services-->Dispatch PEIM(CPU乞巧,Chipset,Memory摊鸡,IO等的初始化)-->準備HOB列表绽媒,利用DXE IPL PPI進入DXE-->DXE入口函數(shù)


【DXE階段】

DXE階段執(zhí)行大部分系統(tǒng)的初始化工作停士,此階段內(nèi)存已經(jīng)可以被完全使用沦偎,因而此階段可以進行大量的復(fù)雜工作乖寒。從程序設(shè)計的角度來看驾窟,DXE階段與PEI階段類似要拂。

1.DXE的功能:

--DXE Core Services:負責(zé)初始化DXE基礎(chǔ)服務(wù)和執(zhí)行流程虏等;提供的基本服務(wù)包括系統(tǒng)表System Table食绿,Boot Services梳凛,Runtime Services锨苏。

--DXE Dispatcher:負責(zé)執(zhí)行DXE Drivers疙教,初始化系統(tǒng)設(shè)備。

與PEIM類似伞租,每個DXE Driver都是一個獨立的模塊贞谓,模塊入口函數(shù)類型定義為:

typedef EFI_STATUS(EFIAPI *EFI_IMAGE_ENTRY_POINT)(

??????????????? IN EFI_HANDLE Imagehandle

???????????????? IN EFI_SYSTEM_TABLE *SystemTable

);

DXE驅(qū)動之間通過Protocol通信(PEIM之間通過PPI通信),Protocol是一種特殊的結(jié)構(gòu)體葵诈,每個Protocol都有一個對應(yīng)的GUID裸弦,利用BootServices的OpenProtocol(HandleProtocol或LocateProtocol),并根據(jù)GUID來打開對應(yīng)的Protocol作喘,進而使用這個Protocol提供的服務(wù)理疙。

當所有的DXE Drivers都執(zhí)行完成后,系統(tǒng)完成初始化徊都,DXE通過EFI_BDS_ARCH_PROTOCOL找到BDS并調(diào)用BDS的入口函數(shù)沪斟,從而進入到BDS階段。

從本質(zhì)上來說暇矫,BDS是一種特殊的DXE階段的應(yīng)用程序主之。


【BDS階段】

BDS階段顧名思義,主要功能是執(zhí)行啟動策略李根,BIOS在這一階段引導(dǎo)操作系統(tǒng)并將控制權(quán)交給操作系統(tǒng)槽奕。

1.BDS的功能:

--初始化控制臺設(shè)備(ConsoleIn/ConsoleOut,USB/PS2鍵盤鼠標房轿,VGA等)

--加載必要的設(shè)備驅(qū)動(PCI枚舉動作在這一階段被執(zhí)行)

--根據(jù)系統(tǒng)設(shè)置加載和執(zhí)行啟動項

如果加載失敗粤攒,系統(tǒng)將重新執(zhí)行DXE Dispatcher以加載更多驅(qū)動所森,然后重新嘗試加載啟動項。

BDS策略通過全局NVRAM變量配置夯接,這些變量可以通過運行時服務(wù)的GetVariable()讀取焕济,通過SetVariable()設(shè)置。例如變量BootOrder定義了啟動順序盔几,變量Boot####定義了各個啟動項(####位4個十六進制大寫符號晴弃,如Boot0001)。當選中某個啟動項后逊拍,OS Loader啟動上鞠,系統(tǒng)進入TSL階段。

2.TSL階段

TSL階段是系統(tǒng)加載器OS Loader執(zhí)行的第一個階段芯丧,這一階段OS Loader作為UEFI應(yīng)用程序運行芍阎,系統(tǒng)資源仍然由UEFI內(nèi)核控制。當啟動服務(wù)ExitBootServices()被調(diào)用后缨恒,系統(tǒng)進入Runtime階段谴咸。

TSL階段之所以稱為臨時系統(tǒng),在于它存在的目的是為了系統(tǒng)加載器準備執(zhí)行環(huán)境肿轨。UEFI Shell是這個臨時系統(tǒng)的人機交互界面寿冕。正常情況下蕊程,系統(tǒng)不會進入UEFI Shell椒袍,而是直接進入操作系統(tǒng)加載器,只有用戶干預(yù)或產(chǎn)生嚴重錯誤情況下才會進入UEFI Shell藻茂。


小結(jié):

相對于BIOS驹暑,UEFI有更好的可編程性,強大的擴展性辨赐,出色地安全性优俘,并且其設(shè)計更適應(yīng)64位平臺。UEFI定義了操作系統(tǒng)與固件平臺間的接口掀序。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帆焕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子不恭,更是在濱河造成了極大的恐慌叶雹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件换吧,死亡現(xiàn)場離奇詭異折晦,居然都是意外死亡,警方通過查閱死者的電腦和手機沾瓦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門满着,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谦炒,“玉大人,你說我怎么就攤上這事风喇∧模” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵魂莫,是天一觀的道長透且。 經(jīng)常有香客問我,道長豁鲤,這世上最難降的妖魔是什么秽誊? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮琳骡,結(jié)果婚禮上锅论,老公的妹妹穿的比我還像新娘。我一直安慰自己楣号,他們只是感情好最易,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炫狱,像睡著了一般藻懒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上视译,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天嬉荆,我揣著相機與錄音,去河邊找鬼酷含。 笑死鄙早,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的椅亚。 我是一名探鬼主播限番,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼呀舔!你這毒婦竟也來了弥虐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤媚赖,失蹤者是張志新(化名)和其女友劉穎霜瘪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體省古,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡粥庄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了豺妓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惜互。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡布讹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出训堆,到底是詐尸還是另有隱情描验,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布坑鱼,位于F島的核電站膘流,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鲁沥。R本人自食惡果不足惜呼股,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望画恰。 院中可真熱鬧彭谁,春花似錦、人聲如沸允扇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽考润。三九已至狭园,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糊治,已是汗流浹背唱矛。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俊戳,地道東北人揖赴。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像抑胎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子渐北,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容