EDKII User Manual v0.7(一)

1. EDKII介紹

本文檔提供了有關(guān)下載,配置和構(gòu)建EDKII項(xiàng)目以及運(yùn)行EDKII仿真環(huán)境的詳細(xì)說明。

1.1.概述

本章介紹EDKII項(xiàng)目引入的功能,并闡述了幾個(gè)關(guān)鍵特性所起的作用。閱讀完本章,讀者將對EDKII有個(gè)基本的了解。

EDKII引入的特性包括:

  • 最小分配單元
    EDKII引入了“Packages”的概念。這是代碼發(fā)布的基本單位。與EDK相比,EDK II用戶可以發(fā)布和使用“Packages”,而不是使用“Whole Source Tree”。

  • 相同功能的不同實(shí)現(xiàn)
    EDKII引入了“Library Class/Library Instance”的概念,“Library Class”是一組用于常見的支持例程的標(biāo)準(zhǔn)接口?!癓ibrary Instance”提供了這些接口的具體實(shí)現(xiàn)。平臺(tái)集成商可以根據(jù)不同的應(yīng)用場景選擇不同的實(shí)現(xiàn)。

  • 統(tǒng)一的配置接口
    平臺(tái)配置數(shù)據(jù)庫(PCD)是一種為模塊開發(fā)者提供統(tǒng)一接口的機(jī)制,用于提取固件的編譯時(shí)或運(yùn)行時(shí)所確定的外部輸入信息。該機(jī)制標(biāo)準(zhǔn)化了平臺(tái)和模塊設(shè)置暴露的問題,可以促進(jìn)平臺(tái)移植。

  • 跨結(jié)構(gòu)和交叉編譯的能力
    EDKII源碼支持各種架構(gòu)(如IA32、X64、IA64)以及各種工具鏈(如Microsoft VC、GNU GCC和Intel ICC)。為了支持這些功能,EDKII為庫中的架構(gòu)相關(guān)或編譯器相關(guān)的功能提供了特定的實(shí)現(xiàn)。

  • 已有模塊的兼容性
    EDKII提供了trunk驅(qū)動(dòng)程序,以解決在主要由EDKII模塊組成的平臺(tái)中使用已有的EDK模塊的二進(jìn)制兼容性問題。

  • 重定義基礎(chǔ)API(即模塊化開發(fā)環(huán)境庫)
    在EDKII中,有很多API可以被模塊化開發(fā)者重新定義和增加,如PCI庫、I/O庫和Print庫等。

  • 增強(qiáng)的構(gòu)建系統(tǒng)
    其基礎(chǔ)架構(gòu)基于Python,獨(dú)立于操作系統(tǒng)。它公開幾個(gè)配置文件,用戶可以用它來選擇各種工具鏈,甚至是構(gòu)建規(guī)則或生成目標(biāo)。

EDKII提供EDK模塊所需的定義和庫接口,因此EDK模塊可以被集成到EDKII中。

1.1.1. UEFI & PI

統(tǒng)一可擴(kuò)展固件接口(UEFI)規(guī)范定義了操作系統(tǒng)和平臺(tái)固件之間的一組標(biāo)準(zhǔn)接口。UEFI的前身是Intel開發(fā)的可擴(kuò)展固件接口(EFI)。Intel后來將EFI的所有權(quán)交給了一個(gè)非營利性組織UEFI論壇,該論壇現(xiàn)在負(fù)責(zé)UEFI的開發(fā)和推廣工作。

UEFI平臺(tái)初始化規(guī)范(PI)是UEFI論壇和UEFI一起定制的一套規(guī)范。PI的前身是Intel面向EFI的平臺(tái)創(chuàng)新框架。UEFI/EFI指定操作系統(tǒng)到固件的接口,PI/Framework規(guī)范指定了構(gòu)建固件的結(jié)構(gòu)。

1.1.2. EDK & EDKII

EFI開發(fā)工具包(EDK)是Framework Core Interface Specification定義的開源框架版本,以及一組示例驅(qū)動(dòng)程序,并為Nt32、Unix和DUET平臺(tái)實(shí)現(xiàn)了三個(gè)目標(biāo)樣本。除了開源框架基礎(chǔ)代碼之外,EDK還允許開發(fā)、調(diào)試和測試EFI和DXE驅(qū)動(dòng)程序,OptionROM和pre-Boot應(yīng)用程序。

為了解決使用EDK所暴露的問題,Intel啟動(dòng)了現(xiàn)在稱為EDKII的重構(gòu)計(jì)劃。它著重于如何讓客戶輕松編寫特定類型的模塊,將模塊移植到平臺(tái)上或重新定制。以下部分詳細(xì)介紹了EDKII引入的幾個(gè)關(guān)鍵概念,如包、庫類/庫實(shí)例和PCD等。

1.1.2.1. Package

沒有整個(gè)源碼樹就不能編譯EDK。并且,最小分配單元為整個(gè)源碼樹。為了解決這個(gè)問題,EDKII推出了Package的概念。使用這個(gè),可以不需要整個(gè)源碼樹。

Package是最小的分配單位,同時(shí)在一個(gè)項(xiàng)目中提供一個(gè)自然的分配體系,為不同的目的服務(wù)。例如,從硬件的角度看,開發(fā)者可以將CPU/芯片組/平臺(tái)相關(guān)的定義和驅(qū)動(dòng)程序單獨(dú)分成三個(gè)package,以便用戶發(fā)布和重用。開發(fā)人員也可以將獨(dú)立于各個(gè)平臺(tái)的所有模塊放在一個(gè)package中。這樣,當(dāng)平臺(tái)移植時(shí),開發(fā)者只需要關(guān)注平臺(tái)相關(guān)的代碼。

EDKII提供了一整套Package,這部分將在下面介紹。由于某些軟件包并不是構(gòu)建指定模塊或固件所必須的,固件開發(fā)人員需要選擇相關(guān)軟件包來完成構(gòu)建或發(fā)布。此外,開發(fā)人員還可以基于EDKII代碼庫創(chuàng)建和發(fā)布自己的軟件包。欲了解更多信息,請參閱EDKII Package規(guī)格文檔。

1.1.2.2. Library class/Library Instance

因?yàn)樵诠碳_發(fā)中可能存在相同的功能需求需要不同的實(shí)現(xiàn),如:

l 使用C代碼提供跨體系結(jié)構(gòu)的功能,而不是使用匯編代碼來提供更好的性能

l 使用I/O端口執(zhí)行PCI配置周期,而不是使用內(nèi)存I/O指令

Library class是一組標(biāo)準(zhǔn)的API定義,用于提供某些功能。模塊編寫者可以直接使用它們進(jìn)行編程。Library Instance提供這些API的實(shí)現(xiàn)。Library class和Library Instance之間的關(guān)系是一對多的關(guān)系。一個(gè)Library class可能有多個(gè)實(shí)現(xiàn),即多個(gè)Library Instance。一個(gè)模塊只依賴于一個(gè)Library class而不是具體的實(shí)現(xiàn),所以相同的模塊源代碼可以很容易地配置為與不同的Library Instance鏈接以滿足各種需求。EDKII提供了很多Library class/Library Instance,以方便用戶在MdePkg中進(jìn)行開發(fā)。例如,MdePkg提供一個(gè)名為BaseMemoryLib的Library class,其中有許多與內(nèi)存操作相關(guān)的API。對于這個(gè)Library class,有多個(gè)Library Instance,如:

  • 一個(gè)用C代碼實(shí)現(xiàn)跨平臺(tái)
  • 一個(gè)用ASM實(shí)現(xiàn)以提高內(nèi)存操作的效率

平臺(tái)集成商可以選擇性地使用各種實(shí)現(xiàn)。

1.1.2.3. PCD

PCD是模塊用于從外部來源提取信息和控制程序行為的統(tǒng)一機(jī)制。信息可以來自許多不同的地方。信息可能是:

  • 編譯時(shí)
  • 生成image時(shí)
  • 運(yùn)行時(shí)

模塊編寫者不需要知道信息來自哪里,因?yàn)槠脚_(tái)開發(fā)人員可以自行選擇。模塊的源代碼可以保持不變以支持多個(gè)平臺(tái),因?yàn)樗械耐獠枯斎胄畔⒍际怯赏坏腜CD接口提取的。

例如,PCD“PcdDebugPrintErrorLevel”用于控制調(diào)試打印級別。模塊開發(fā)人員只需調(diào)用PCD接口PcdGet32(PcdDebugPrintErrorLevel)來提取其值。PCD的值由模塊構(gòu)建中的平臺(tái)配置決定。各種值可能導(dǎo)致不同的行為,例如啟用或禁用特定調(diào)試打印語句的顯示。

1.2.相關(guān)信息

1.2.1. 有用的文章和信息源

1.2.1.1. TianoCore文檔

http://sourceforge.net/projects/edk2/files/

  • EDK II INF File Specification, Version 1.2, Intel, 2009.
  • EDK II DSC File Specification, Version 1.2, Intel, 2009.
  • EDK II DEC File Specification, Version 1.2, Intel, 2009.
  • EDK II FDF (Flash Description File) File Specification, Version 1,2, Intel, 2009.
  • EDK II Build Specification, Version 1.2, Intel, 2009.

1.3.術(shù)語

1.4.讀者

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容