大家好,欢迎来到IT知识分享网。
目录
EDK环境安装
安装
VS2015(
或
EWDK)
安装
JAVA(JRE/JDK)
安装
cygwin64
IASL
编译工具
NASM
编译工具
Link16
工具
EDK代码下载


下载第三方依赖包
1.
Openssl
:
GitHub – openssl/openssl: TLS/SSL and crypto library
CryptoPkg\Library\OpensslLib\openssl
2
.
brotli
: https://github.com/google/brotli.git
BaseTools\Source\C\BrotliCompress\brotli
MdeModulePkg\Library\BrotliCustomDecompressLib\brotli
编译Windows工具
•Edksetup.bat rebuild
生成编译所需工具 BaseTools\Bin\Win32
Build 命令
编译项目
修改
Conf
/target.txt (
来源
BaseTools
\
Conf
\
target.template
)
ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc
TARGET = DEBUG (RELEASE)
TARGET_ARCH = IA32 (X64/IA32/ARM)
TOOL_CHAIN_TAG = VS2015x86 (VS2015)
MAX_CONCURRENT_THREAD_NUMBER = 8 (1/2/4)
Terminal
窗口运行:
build
(
默认调用
target.txt)
或:
build -a IA32 -p EmulatorPkg\EmulatorPkg.dsc -t VS2015x86
编译模块
1.
编译
Driver
模块
Build –a X64 –t VS2015 –m ShellPkg\Application\Shell\Shell.inf –p ShellPkg\ShellPkg.dsc
— 编译结果:
Build\Shell\DEBUG_VS2015\X64\ShellPkg\Application\Shell\Shell\OUTPUT
1.
编译
Library
模块
build -a X64 -a IA32 -t VS2015 -b DEBUG -m CryptoPkg\Library\OpensslLib\OpensslLib.inf -p CryptoPkg\CryptoPkg.dsc
DSC (•Platform Description (DSC) File)
ØThe DSC file is used by EDKII built tools as a starting point in the platform build process.
AMI : Build/Platform.dsc ( Generate platform DSC file using information from VEB, CIF, and SDL files )
EDKII: xxxPkg/xxx.dsc
<EDK_II_DSC> ::= [<Header>] <Defines> [<SkuIds>] <Libraries>* <LibraryClasses>* <Pcds>* <Components>+ <BuildOptions>* <UserExtensions>*
1.[
Header
] Section
(
optional
)
—注释描述说明
2.[
Defines
] Section (required)
设置 build 相关的全局变量,这些变量可以被 .dsc 文件的
其他模块引用,必须是 .dsc 文件的第一部分
•3.[BuildOptions] Section (optional)
—指定本模块/项目的编译和连接选项
[编译器家族]:[$(Target)]_[TOOL_CHAIN_TAG]_[$(Arch)]_[CC|DLINK]_FLAGS[=|==]选项
[BuildOptions] Section in INF module:
4.[SkuIds] Section (optional)
•匹配SKUID_IDENTIFIER可以对不同的Sku设置不同的pcd值等
5 [
Libraries
] Section
(
optional
)
目前已经很少使用,主要为了兼容旧的
EDK
标准模块
• 6 [ LibraryClasses ] Section ( optional )
定义
了库的名字和库
.
inf
文件的
路径
格式:
[LibararyClasses.$(Arch).$(MODULE_TYPE)]
LibraryName | path/LibraryName.inf、
$MODULE_TYPE 表示模块的类别,支持以下模块类型:
SEC、PEI_CORE、PEIM、DXE_CORE、DXE_SAL_DRIVER、BASE、DXE_SMM_DRIVER、DXE_DRIVER、
DXE_RUNTIME_DRIVER、UEFI_DRIVER、UEFI_APPLICATION、USER_DEFINED

—模块编译生成.efi文件
—存放相对路径的模块 inf 文件
—可以嵌套 LibraryClasses/Pcd*/BuildOptions等

—定义平台配置数据,在不改动 .inf 文件和源文件的情况下完成对平台的配置(Override)
—需要在DEC文件中提前定义声明

—用户自定义区域,EDKII 编译工具会忽略,用户可以添加工具进行解析
FDF(•Flash Description (FDF) File )
• —与 DSC 文件中FLASH_DEFINITION匹配
AMI : Build/Platform.fdf ( Generate platform fdf file using information from VEB, CIF, and SDL files )
EDKII: xxxPkg/xxx.fdf
<EDK_II_FDF> ::=
[<Header>]
[<Defines>]
<FD>*
<FV>*
<Capsule>*
<FmpPayload>*
<VTF>*
<Rules>*
<OptionRom>*
<UserExtensions>*
[Defines] Sections
(
optional)
—定义fdf文件版本,定义PCD值,变量预定义等

Build
工具根据
FD
名称生成对应的
.
fd
文件,可以有一个或多个
FD
区域
$(OUTPUT_DIRECTORY)/$(TARGET)_$(TAGNAME)/FV
FD TOKEN
FD DEFINE
FD SET
FD Region(定义存放layout及内容
[FV] Sections
(required)
—每个FDF有一个或者多个FV
–FV section中的inf模块最终会编译到对应的FV中
–FV需要与FD中FD Region对应
[Rules] Sections
(optional
)
—定义编译模块输入输出规则
— 可以对单独的模块做RuleOverride
— SEC/PEI模块及直接包的bin文件等不需要压缩
INF
• Module Information (INF) File
PCD
•Platform Configuration Database
类型:
FeatureFlag
,
FixedAtBuild
,
PatchableInModule
,
Dynamic,
DynamicEx
PCD的全称是Platform Configuration Database,它是一个存放了UEFI下可访问数据的数据库。
它的特点是可以在UEFI存在的大部分时间内访问,在【UEFI实战】在库中使用全局变量中就曾经介绍过通过PCD来传递全局变量。这里说是大部分时间内,那是因为在诸如SEC阶段,以及PEI、DXE阶段的早期,某些PCD相关的模块还没有加载起来之前,这些类型的PCD还是不能访问的。
TokenSpaceGuidCName.PcdCName
TokenSpaceGuidCName是一个GUID,PcdCName是一个变量名,两者合起来构成了唯一的PCD变量。
PCD的类型
FeatureFlag PCD:它最终返回的是一个TRUE或者FALSE,用于判断条件中;FeatureFlag PCD跟FixedAtBuild是一样的,它相当于类型是BOOELAN的FixedAtBuild PC
PatchableInModule PCD:这种变量的值可以在编译的时候确定,这个不算特别,特别的是它可以在编译完成的二进制文件上通过工具来修改值;
FixedAtBuild PCD:静态值,在编译的时候确定,整个UEFI阶段不可变;
Dynamic PCD:前面的三种类型可以认为是静态的PCD,而这里以及之后的是动态的PCD;它的特点是可以在UEFI运行的过程中通过Set宏来修改值;在《edk-ii-build-specification.pdf》中有说明该种类型的PCD必须在DSC中在列一遍,但是实际使用似乎并不是必须的;
DynamicEx PCD:跟Dynamic PCD类似,算是加强版,使用宏PcdGetEx/PcdSetEx来访问变量;
需要注意的是上面的类型并不是在一个SPEC中定义的,前面的4中是满足EDKII规范,而最后一个满足的是PI规范,这个对使用的影响还不是很确定。
Visual Forms Representation
Unicode Strings File
UEFI中,构成这样的窗体的组件大致有四种,分别是Strings,Forms,Fonts和Images,如下图所示:
Pre-build or
AutoGen
stage
: parse meta-data files, UCS-2LE encoded files and VFR files to generate some C source code files and the
Makefiles
.
Build or $(MAKE) stage
: process source code files to create PE32/PE32+/COFF images that are processed to EFI format using NMAKE (Microsoft operating system development platforms) or MAKE (for UNIX style operating system development platforms).
Post-build or
ImageGen
stage
: takes the binary, EFI format files and creates EFI “FLASH” images, EFI update capsules, UEFI applications or PCI Option ROMs.
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116602.html










































