UEFI原理與程式設計 一

2021-10-12 10:14:41 字數 3162 閱讀 8592

常見縮寫及描述:

縮略詞全名

描述uefi

unified extensible firmware inte***ce

統一的可擴充套件韌體介面

bsboot services

啟動服務

rtruntime service

執行時服務

bios

basic input output system

基本輸入輸出系統

1 sec階段

sec(security phase)階段是平台初始化的第乙個階段,計算機系統加電後進入這個階段。功能上說,它執行以下四種任務:

如下資訊作為引數傳遞戈pei的入口函式:

2 pei階段

pei(pre-efi initialization)階段, 其主要功能是為dxe 準備執行環境,將需要傳遞到dxe 的資訊組成hob(handoff block)列表,最終將控制權轉交到dxe 手中。

uefi 的乙個重要特點是其模組化的設計。模組載入記憶體後生成image。image 的入口函式為_moduleentrypoint,pei 也是乙個模組。

3 dxe階段

dxe(driver execution environment)階段執行大部分系統初始化工作,進入此階段時,記憶體已經可以被完全使用,因而此階段可以進行大量的複雜工作

4 bds階段

bds(boot device selection)的主要功能是執行啟動策略,其主要功能包括:

5 tsl階段

tsl(transient system load)是作業系統載入器(os loader)執行的第一階段,

6 rt階段

系統進入rt(run time)階段後,系統的控制權從uefi 核心轉交到os loader 手中,

uefi 占用的各種資源被**到os loader,僅有uefi 執行時服務保留給os loader 和os

使用。隨著os loader 的執行,os 最終取得對系統的控制權。

7 al階段

在rt 階段,如果系統(硬體或軟體)遇到災難性錯誤,系統韌體需要提供錯誤處理和

災難恢復機制,這種機制執行在al(after life)階段。uefi 和uefi pi 標準都沒有定義此階段的行為和規範。

略(主要一些工具安裝以及編譯edk2, 後續有機會以現實環境為例描述)
標準應用程式工程模組是其他應用程式工程模組的基礎,也是uefi中常見的一種應用程式工程模組。每個工程模組由兩部分組成:工程檔案和原始檔。

.inf(module information file)檔案(#後面內容為注釋)。.inf 檔案是模組的工程檔案,其作用相當於makef ile 檔案或visual studio 的.proj 檔案,用於指導edk2 編譯工具自動編譯模組。

工程檔案分為很多個塊,每個塊以 「[塊名]」 開頭, 「[塊名]」 必須獨佔一行。

必須塊塊描述

[defines]

定義本模組的屬性及其他變數,這些變數可在工程檔案其他塊中引用

[sources]

列出本模組所有的原始檔及資源檔案

[packages]

列出本模組引用到的所有包的包宣告檔案,

可能引用到的資源包括標頭檔案,guid, protocol等這些資源都宣告在檔案 .dec中

[libraryclasses]

列出本模組要鏈結的庫模組

非必須塊

塊描述[protocols]

列出本模組用到的protocol

[guids]

列出本模組用到的guid

[buildoptions]

指定編譯和鏈結選項

.dec 檔案定義了公開的資料和介面,供其他模組使用。它包含了必需區塊[defines] 以及可選區塊[includes]、[libraryclasses]、[guids]、[protocols]、[ppis] 和[pcd] 幾個部分。

.dec檔案需要被呼叫模組.inf檔案所包含。

模組編譯生成 .efi 檔案, shell 中執行 .efi檔案時,shell首先用gbs->loadimage() 將 .efi 檔案載入到記憶體生成image 物件。然後呼叫gbs->startimage(image) 啟動這個image物件(efi 裝置路徑,命令引數,uefi環境變數 詳見efi_status efiapi internalshellexecutedevicepath ) 。 startimage 主要作用就是找出可執行程式映像(image)的入口函式並執行。,對應用程式來說,就是_moduleentrypoint 函式。進入_moduleentrypoint(配置在.inf塊中的入口函式 ) 後,控制權才轉交給應用程式(此處就是我們的 .efi)。

[defines]塊用於提供package的名稱、guid、版本號等資訊。

## /edk2/mdepkg/mdepkg.dec

[defines]

dec_specification = 0x00010005

package_name = mdepkg

package_uni_file = mdepkg.uni

package_guid = 1e73767f-8f52-4603-aeb4-f29b510b6766

package_version = 1.06

[includes]塊

列出本package提供的標頭檔案所在的目錄

## /edk2/mdepkg/mdepkg.dec

[includes]

include

[includes.ia32]

include/ia32

[includes.x64]

include/x64

.inf 用於編譯乙個模組, 而.dsc 檔案用於編譯乙個package,

參考文件: uefi原理與程式設計 戴正華 機械工業出版社

UEFI啟動與GPT分割槽

當系統首次引導或被重置時,處理器會執行bios中的一段 cpu會呼叫這個重置向量來啟動乙個位於rom中的已知位址程式。它會執行乙個機器自檢程式 post bios完成自檢後就從驅動器的第乙個扇區,主引導記錄 mbr 就位於第乙個扇區,bios將mbr裝入記憶體,執行,並將管理許可權交給mbr。mbr...

UEFI與MBR啟動的區別

bios mbr已經趨於淘汰,uefi gpt是大勢所趨 gpt是一種新型磁碟模式,與我們常用的mbr磁碟相比更穩定,自糾錯能力更強,一塊磁碟上主分割槽數量不受 4個的 限制,支援大於2t的總容量及大於2t的分割槽 幾乎沒有上限,最大支援到128個分割槽,分割槽大小支援到256tb xp系統無法識別...

UEFI啟動與Legacy啟動方式

bios basic input output system,基本輸入輸出系統 是一組固化到主機板rom晶元上的程式,儲存著計算機的基本輸入輸出程式 開機自檢程式和系統自啟動程式。主要功能是為計算機提供最底層的 最直接的硬控制。bios設定中,有兩種讓進入系統的方法,分別是uefi和legacy u...