FD 生成流程

《edk2-BuildSpecification-release-1.28 p.173》
上图是 UEFI edk2 spec 中 《Overview of Flash Device Layout》时序。
- GenSec: 用于生成 Sec section, Sec 的定义在 FDF 文件中
- GenFfs: 用于生成 FFS 文件,它是构成FV的基础文件,其生成规则定义在 FDF文件
- GenFv: 用于生成 Fv 文件,它定义 FFS 在 Fv 中存放的方式和规则
- GenFds: 用于生成 Fd 文件
根据上述流程描述,一个重要规则是 FDF 来定义的。
FD layout 定义
FDF

《edk2-FdfSpecification-release-1.28.01 P.25》
FDF文件用于描述整个 FD 生成的规则。
通常在进行编译时, FDF 文件 和 DSC 文件位于同一级目录,DSC 中描述中编译各个EFI 文件,之后通过Tools 生成 FD images.
整体流程可以整理如下:

FDF语法
Define Section
[Defines]
DEFINE FVMAIN_COMPACT_SIZE = 0x2ff000
Define section 通常用于定义全局的变量。上面就是定义了一个 FVMAIN_COMPACT_SIZE 的全局变量,这个变量在后面的编译中用到。
FD Section
FD 的语法规则如下:
Token = VALUE [| PcdName]
Token 后面的 PcdName 是可选的,如果后面有 PcdName , 那么会将 VALUE 赋值给 PcdName.
FD 支持的 Token限定为如下的几个:
- BaseAddress : flash device 的 基地址
- Size : flash device 的大小,单位是 Bytes
- ErasePolarity : 擦写极性,只有0或者1 两种数值
- BlockSize: 支持定义多个 BlockSize, 如果有多个 BlockSize, 通常第一个 size 是 block0 的,之后依次是 block 1:N
- NumBlocks: 连续 block 的个数
典型定义如下:
[FD.XXX_EFI]
BaseAddress = 0x80000000|gXXXTokenSpaceGuid.PcdEmbeddedFdBaseAddress #The base address of the FLASH Device.
Size = 0x002A0000|gXXXTokenSpaceGuid.PcdEmbeddedFdSize #The size in bytes of the FLASH Device
ErasePolarity = 1
BlockSize = 0x1000
NumBlocks = 0x2A0
FV Section
定义方式:[FV.UiFvName], 其中 UiFvName 是通常是 FVMAIN_COMPACT.
语法规则:
- DEFINE 语法: 用于定义FV SECTION 中使用的宏变量。
DEFINE EDK_VERSION = 10
Block 语法
BLOCK_SIZE = VALUE
NUM_BLOCKS = VALUE
FV Set 语法
SET <PcdName> = VALUE
用于定义 Pcd 变量
- INF 语法
INF 用于引用 edk2 inf 文件或者component。在 FV section 使用 INF 会默认创建一个引用 module 的 inf 文件中设定的 MODULE_TYPE 的 ffs 文件。
同时,在 FV.FVMAIN_COMPACT 之后定义的 INF 顺序规定了相关的 module 的在 FD 中的顺序。
- FILE 语法
FILE 关键字用于引用 ffs 文件,格式如下:
FFS file specification syntax is one of the following:
FILE Type $(NAMED_GUID) [Options] FileName
OR
FILE Type $(NAMED_GUID) [Options] {
SECTION SECTION_TYPE = FileName
SECTION SECTION_TYPE = FileName
}
引用文件的类型定义如下:


Named_GUID 通常是从 INF file's [Defines] section FILE_GUID 获取得到。
参考
EDK II Documentation · tianocore/tianocore.github.io Wiki · GitHub
本文介绍了UEFI FD的生成流程,包括GenSec、GenFfs、GenFv和GenFds四个步骤,强调了FDF文件在定义FD布局中的关键作用。FDF文件用于描述FD的规则,包含Define Section和FD Section等,用于设置如BaseAddress、Size等参数。FV Section则定义了FV的结构,包括Block、FV Set、INF和FILE等语法。INF和FILE关键字分别用于引用模块和FFS文件,决定了它们在FD中的排列顺序。
714

被折叠的 条评论
为什么被折叠?



