1 EDKII Build过程简介
EDKII Build主要是用来处理EDKII meta-data文件(包括build_rule.txt,tools_def.txt,target.txt等),EDKII source和binary文件,以及一些已经存在的可兼容的EDK组件和库模块文件,最终产生遵循UEFI和PI规范的二进制文件。
EDKII Build过程主要可以分为3个阶段:
- Pre-build(AutoGen)阶段:主要是来解析meta-data文件,dsc文件,.inf文件,.fdf文件,.dec文件,Unicode文件和VFR文件等,产生一些标准C的代码文件(Autogen.c,Autogen.h)和相应的Makefile文件。
- Build or $(MAKE)阶段:主要是来处理source文件并通过Make(Linux系统)或者Nmake(Windows系统)来生成符合EFI格式的PE32/PE32+/COFF 文件。
- Post-build(ImageGen)阶段:主要是来处理binary文件和EFI格式的文件,产生最终的UEFI Flash Images, Capsules,Applications和PCI Option ROMs。
在整个EDKII框架的编译流程中涉及到了以下一些输入文件:
-
.inf文件
.inf文件用于描述一个系统模块(Module),它是UEFI系统的一个特色,其作用相当于Visual Studio项目中的.proj文件,用于指导EDKII编译工具自动编译模块,它包含[Defines]、[Sources]、[Packages]、[LibraryClasses]等必须的部分以及 [Depex]、[Protocols]、[Ppis]、[Guids]、[PCD]、[BuildOptions]等可选的部分[5]。 -
.dsc文件
.dsc文件用于描述一个平台包(Package),它相当于Visual Studio项目中的.solution文件,用于指导编译工具编译整个平台包,它包含[Defines]、[LibararyClasses]、 [Components]等几个必需部分以及 [PCD]、[BuildOptions]等几个可选部分。其中在[Components]内定义的模块都会被Build工具编译并生成对应的.efi可执行文件。 -
.dec文件
.dec文件是一个声明文件,它定义了公开的接口、数据及初始值,向其它模块提供了本文件的资源。它包含了必须的[Defines]以及可选的[Includes]、[LibraryClasses]、[Guids]、[Protocols]、[Ppis]和[PCD]等几个部分。 -
.fdf文件
.fdf文件是Flash的描述文件,描述了最终固件文件的组成结构,用于生成固件Image、Option Rom Image或可启动的Flash Image等。
Meta-data文件中的build_rule.txt一般不需要用户更改,编译工具通过整个文件来定义如何处理不同的文件类型,如何构建最终的固件Image文件等规则;而tools_def.txt则描述了用户可配置的工具的路径、参数等信息,以及一些默认的编译器标记;target.txt描述了此次编译的平台名字、架构,以及build_rule.txt和tools_def.txt文件所在的路径信息,因此该文件是编译工具启动后第一个解析的。
2 Firmware Image Creation
文章来源
1.关于EDKII Build工具的性能优化研究
2.edk2-BuildSpecificaton-release-1.28.pdf