导航菜单
首页 >  edk2  > EDK2 Overview

EDK2 Overview

EDK2 Overview2019-08-31

最近在移BL到UEFI, 来大概看下基础。

UEFI(Unified Extensible Firmware Interface)是Intel提出的一种规范(specification),由PC BIOS而来,如下图(阿桑的wikipedia打不开?画个txt pic),介于OS和FW之间,QCOM Android BL似乎用它来代替LK。UEFI is based on EFI。

------| OS |--/|\--___________|____________________extensible firmware interface___________|____________________| ----\|/----- | Firmware | ------------ | Hardware | -------------

TianoCore是一种UEFI的开源实现, edk/edk2(based on edk)一种开发环境for UEFI,用的tinaocore。

微软的Project Mu是另一个实现,edk2的变种?

Overview

edk2里的代码最小组成都是按模块(module)来划分,n个模块可以组成一个包(package),平台(platform)是一种特殊的package,一般都是编译的入口。

module有个inf文件描述这个module,package有个dec文件,platform则是dsc文件。还有个fdf文件用作flash用。

module可以是application,library,or driver。

Library有个class和instance,class就是一个抽象,instance负责具体实现,不同平台可以定义不同实现。

Driver只接触了DXE drv, 提供protocol供其他module使用。

Application和Driver区别是是否退出。

package之间还可以互相引用,just like C calling eath other.

另外feature宏用PCD来代替,看个例子:

[PcdsFixedAtBuild.common] # LinuxLoaderCommon gQcomTokenSpaceGuid.EnableDisplayMenu|TRUE|BOOLEAN|0x00015005EFI_STATUSDisplayUnlockMenu (INTN Type, BOOLEAN Value){ EFI_STATUS Status = EFI_SUCCESS; OPTION_MENU_INFO *OptionMenuInfo; OptionMenuInfo = &gMenuInfo; if (FixedPcdGetBool (EnableDisplayMenu)) {DrawMenuInit ();

just like Linux kernel IS_ENABLED(),rt?

plz remember library和pcd都是给module自定义用的。

makefile在edk2是中间文件了,可以用inf/dsc提供的build option来修改。

ok,就这么多,其他用法看代码足矣。

参考文档https://uefi.org/https://www.tianocore.org/https://github.com/tianocore/tianocore.github.io/wikiEDK_II Module Writer_s Guide_0_7.pdfEDK_II_UserManual_0_7.pdfedk-ii-dec-specification.pdfedk-ii-dsc-specification.pdfedk-ii-inf-specification.pdfedk-ii-pcd-specification.pdfhttps://microsoft.github.io/mu/

版权

相关推荐: