EDK代码及编译详细介绍

EDK代码及编译详细介绍EDK 环境 安装 代码下载 编译工具 代码编译 项目 模块 DSC FDF 文件 INF DEC 文件 UNI VFR 文件 编译流程 edk

大家好,欢迎来到IT知识分享网。

目录

EDK环境(安装/代码下载/编译工具)

代码编译(项目/模块)

DSC/FDF文件

INF/DEC文件

UNI/VFR文件

编译流程


EDK环境(安装/代码下载/编译工具)

EDK环境安装


安装
VS2015(

EWDK)

安装
JAVA(JRE/JDK)

安装
Python27

安装
cygwin64

IASL
编译工具

NASM
编译工具

Link16
工具
EDK代码及编译详细介绍

EDK代码下载

EDK代码及编译详细介绍需要安装gitTortoiseGit

EDK代码及编译详细介绍

EDK代码及编译详细介绍

EDK代码及编译详细介绍切换BranchTag

EDK代码及编译详细介绍EDK代码及编译详细介绍

下载第三方依赖包


1.
Openssl
:
GitHub – openssl/openssl: TLS/SSL and crypto library

   CryptoPkg\Library\OpensslLib\opensslEDK代码及编译详细介绍


2
.
brotli
:  https://github.com/google/brotli.git

  BaseTools\Source\C\BrotliCompress\brotli

  MdeModulePkg\Library\BrotliCustomDecompressLib\brotli

EDK代码及编译详细介绍

编译Windows工具

Edksetup.bat rebuild

EDK代码及编译详细介绍

生成编译所需工具 BaseTools\Bin\Win32

EDK代码及编译详细介绍

Build 命令

EDK代码及编译详细介绍EDK代码及编译详细介绍

编译项目


修改
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

EDK代码及编译详细介绍

编译模块


1.
编译
Driver
模块

Build –a X64 –t VS2015 –m ShellPkg\Application\Shell\Shell.inf –p ShellPkg\ShellPkg.dsc

EDK代码及编译详细介绍

EDK代码及编译详细介绍

编译结果:

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

EDK代码及编译详细介绍EDK代码及编译详细介绍

DSC/FDF文件

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>*

EDK代码及编译详细介绍EDK代码及编译详细介绍EDK代码及编译详细介绍EDK代码及编译详细介绍EDK代码及编译详细介绍


1.[
Header
] Section
(
optional
)

    —注释描述说明

EDK代码及编译详细介绍


2.[
Defines
] Section (required)

设置 build 相关的全局变量,这些变量可以被 .dsc 文件

其他模块引用,必须是 .dsc 文件的第一部分

EDK代码及编译详细介绍EDK代码及编译详细介绍

3.[BuildOptions] Section (optional)

    指定模块/项目的编译和连接选项

[编译器家族]:[$(Target)]_[TOOL_CHAIN_TAG]_[$(Arch)]_[CC|DLINK]_FLAGS[=|==]选项

EDK代码及编译详细介绍

[BuildOptions] Section in INF module:

EDK代码及编译详细介绍

4.[SkuIds] Section (optional)

匹配SKUID_IDENTIFIER可以对不同的Sku设置不同的pcd值等

EDK代码及编译详细介绍


5 [
Libraries
] Section
(
optional
)
   
目前已经很少使用,主要为了兼容旧的
EDK
标准模块
EDK代码及编译详细介绍6 [ LibraryClasses ] Section ( optional )

定义
了库的名字和库
.
inf
文件的
路径

格式:

 [LibararyClasses.$(Arch).$(MODULE_TYPE)]                       

 LibraryName | path/LibraryName.inf、

EDK代码及编译详细介绍

$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

EDK代码及编译详细介绍7 [Components] Section (required)

模块编译生成.efi文件

  存放相对路径的模块 inf 文件

  —可以嵌套 LibraryClasses/Pcd*/BuildOptions

EDK代码及编译详细介绍

EDK代码及编译详细介绍8.[PCD] Section (optional)

   定义平台配置数据,在不改动 .inf 文件和源文件的情况下完成对平台的配置(Override)

   需要在DEC文件中提前定义声明

EDK代码及编译详细介绍9.[UserExtensions] Section (optional)

用户自定义区域,EDKII 编译工具会忽略,用户可以添加工具进行解析

EDK代码及编译详细介绍

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>*

EDK代码及编译详细介绍

EDK代码及编译详细介绍EDK代码及编译详细介绍EDK代码及编译详细介绍


[Defines] Sections
(
optional)

  —定义fdf文件版本,定义PCD值,变量预定义等

EDK代码及编译详细介绍[FD] Sections (required)


Build
工具根据
FD
名称生成对应的
.
fd
文件,可以有一个或多个
FD
区域

    $(OUTPUT_DIRECTORY)/$(TARGET)_$(TAGNAME)/FV

EDK代码及编译详细介绍
EDK代码及编译详细介绍

FD TOKEN

FD DEFINE

FD SET

FD Region(定义存放layout及内容


[FV] Sections
(required)

   —每个FDF有一个或者多个FV

    –FV section中的inf模块最终会编译到对应的FV

    –FV需要与FDFD Region对应

EDK代码及编译详细介绍

EDK代码及编译详细介绍


[Rules] Sections
(optional
)

    定义编译模块输入输出规则

   — 可以对单独的模块做RuleOverride

   — SEC/PEI模块及直接包的bin文件等不需要压缩

EDK代码及编译详细介绍

EDK代码及编译详细介绍INF/DEC文件

INF

Module Information (INF) FileEDK代码及编译详细介绍Declaration (DEC) File Format  

EDK代码及编译详细介绍

EDK代码及编译详细介绍

EDK代码及编译详细介绍

EDK代码及编译详细介绍

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 
EDK代码及编译详细介绍

UEFI中,构成这样的窗体的组件大致有四种,分别是StringsFormsFontsImages,如下图所示:

EDK代码及编译详细介绍编译流程


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.
EDK代码及编译详细介绍
EDK代码及编译详细介绍

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/116602.html

(0)
上一篇 2025-11-27 19:10
下一篇 2025-11-27 19:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信