edk2中子目錄介紹
來源 https://blog.csdn.net/rikeyone/article/details/80760204
參考:https://github.com/tianocore/tianocore.github.io/wiki
AppPkg
UEFI Application Development Kit是一系列用來進行uefi app開發的套件,標准依賴庫,工具以及demo,目標是降低UEFI app的開發門檻。
MdePkg
全稱為“Module Development Environment Package”,這是一個特殊的package,包含了用於開發一個module所需要的最小環境。一個module可能也會依賴於其他的Package,但是所有modules必須依賴於MdePkg。
MdeModulePkg
此包提供符合UEFI/PI工業標准的模塊,也提供該標准相關的開發環境,PPIs/PROTOCOLs/GUIDs和依賴庫。
ArmPkg
提供ARM架構相關的protocols,屬於ARM平台上的通用代碼。
ArmPlatformPkg
ARM開發板相關的UEFI代碼,包含ARM平台上通用的一些組件,重復利用這些組建會令ARM平台的不同板型之間的移植變得更加容易。
BaseTools
該包提供編譯相關的工具用於EDK和EDK2,比如:AutoGen, Build, GenSec, GenFV, GenFW, GenRds工具。
BeagleBoardPkg
BeagleBoard是一個便宜並且靈活的單板電腦,玩過開發板的同學應該都了解過,基於OMAP3530 SoC (ARM Cortex TM-A8)處理器的開發板。這個包里是對此開發板的支持代碼。
CorebootModulePkg
Coreboot原本和UEFI/BIOS是競爭關系,但是現在Coreboot也逐漸向UEFI標准靠攏,目前依靠此包可以輕松從coreboot啟動到UEFI,Coreboot Support Modules包含了如下代碼:用來解析coreboot table的代碼,報告存儲器/IO資源的代碼,安裝acpi table和smbios table 到EFI系統表中的代碼。它位於uefi環境和hardware的中間層。
CorebootPayloadPkg
用來加載上層UEFI環境的中間層,Hardware->Coreboot->CorebootPayloadPkg->UEFI->HLOS
CryptoPkg
UEFI定義了HLOS(high level OS)和平台固件之間的接口,多個安全特性也在2.2版本之后加入其中,此包是用來提供加密支持的。
DuetPkg
開發者使用的UEFI模擬器,能夠在BIOS機器上模擬UEFI環境。DUET 是基於Legacy BIOS 提供了UEFI模擬器,提供了在傳統BIOS系統上的UEFI環境。
EdkCompatibilityPkg
EDK兼容包提供庫和頭文件用來使能在UEFI2.0+Framework0.9x模式下的EDK編譯。
EdkShellPkg, EdkShellBinPkg
EDK Shell開發包以及一個官方的EDK Shell實現,這兩個包已經在被Shell 2.x逐漸取代了。
ShellPkg,ShellBinPkg
Shell 2.x版本開發包以及一個官方的UEFI Shell 實現。
EmbeddedPkg
為memory mapped controllers提供protocol實現,以及一個簡單的EFI shell(EBL)。
EmulatorPkg
Emulator虛擬環境,用來取代Nt32Pkg和UnixPkg,可以跨平台編譯運行的一個虛擬器。
Nt32Pkg
一個win環境下的UEFI虛擬器,不能用語加載實際的OS,只能用來調試UEFI代碼。已經逐漸被Emulator取代。
UnixPkg
一個類Unix操作系統下的UEFI虛擬器,已經逐漸被Emulator取代。
OvmfPkg
OVMF是用來給虛擬機提供UEFI支持的包,可以使用QEMU和KVM來引導OVMF固件,並進一步引導HLOS。
NetworkPkg
提供網絡支持的包,比如:IPv6網絡協議棧/IPsec驅動/PXE驅動/iSCSI驅動/網絡配置相關的shell app。
Omap35xxPkg
Omap35xxPkg是Texas Instrument OMAP35xx平台支持包。
OptionRomPkg
這個包的目的是為了提供Option ROM image支持的,如果要編譯PCI兼容的Option ROM image,需要依賴此包。
SecurityPkg
提供了四種安全相關的特性:TPM, User identification (UID),secure boot, authenticated variable
StdLib, StdLibPrivateInternalFiles
StdLib提供了標准庫的UDK實現,StdLibPrivateInternalFiles包是用來給StdLib使用的,不能用作其他引用。
UefiCpuPkg
提供兼容UEFI的CPU模塊和庫。
SourceLevelDebugPkg
用來提供debug支持的包。
SignedCapsulePkg
提供了一個簽名校驗方案,用來支持安全升級和恢復。
PcAtChipsetPkg
這個包提供了符合PcAt標准器件的接口和實現。
FatPkg, FatBinPkg
FAT支持包。
UEFI的運行可以分為如下幾個階段:
SEC階段
此階段是安全驗證階段,系統上電后即進入此階段,作為UEFI的第一階段,它是可信系統的根,一般可以在此階段驗證后面的PEI,此階段大部分工作是為后面的PEI階段提供運行環境。
PEI階段
PEI(Pre-EFI-Initialization)是EFI前期初始化階段,資源依然十分有限,內存到了PEI后期才被初始化,其主要功能是為DXE准備執行環境,准備DXE需要的信息並最終將控制權交給DXE。按照功能可以分為PEI Core Services和PEI Modules,另外還需要實現Modules之間通信的接口PPI。
DXE階段
Driver Execution Environment,此階段是驅動運行階段,這是一個非常重要的階段,完成了外設初始化的大部分工作,此階段內存已經可以完全被使用了,此階段還會初始化前面文章所介紹的edk2中的基礎服務組件,系統表,啟動服務表,運行服務表。在所有driver執行完畢之后,系統會進入下一個階段,BDS。
BDS階段
Boot Device Selection階段,只要是啟動策略的執行,它其實是一個特殊的應用程序,當用戶選擇了啟動設備之后,此階段就會繼續運行,跳轉到TSL階段。
TSL階段
Transient System Loader階段,也是一個應用程序運行階段。UEFI Shell就屬於此階段的人機交互界面。但一般情況下不會進入此界面,而是直接執行OS Loader。最后會執行ExitBootServices來結束啟動服務,只保留RunTime Services,進入下一個階段,RT。
RT階段
Runtime 階段是OS Loader階段,系統控制權已經由UEFI內核轉交給OS Loader,UEFI占用的資源都已經被回收了,所有控制權都交給了OS Loader。OS Loader負責夾在真正的操作系統OS。
AL階段
After Life階段,當系統出現故障時進入的階段,UEFI目前沒有定義此階段的行為。
=============== End