UEFI开发(二)——UEFI文件关系

UEFI规范中提出了两个重要的概念——模块(Module)和包(Package)。

模块是UEFI上最小的可单独编译的代码单元,或是预编译的二进制文件,比如efi执行文件。它包含了inf文件、源代码和二进制文件,其中,inf文件用来描述模块的行为,比如产生库、产生Protocol(UEFI协议接口)、使用库,指明唯一标识符等。

由模块、平台描述文件(DSC文件)和包声明文件(DEC文件)组成,他们可以不包含模块,也可以包含很多模块。如EDK2目录下的MdeModulePkg和EmulatorPkg。DSC文件相当于sln文件,用来描述多个工程的信息;

1、EDK2文件关系

打开EDK2文件夹,可以发现里面包含很多个以Pkg结尾的文件夹,这样的文件夹称为package,package和package之间可能存在依赖,Pkg文件夹下有很多个Module(模块),模块是EDK2中最小可编译单元。

package里面都有.dsc文件,可能有.dec文件、.fdf文件。

1.1  DSC文件

DSC文件是edk2的平台描述文件,用来描述和编译包。DSC文件描述了模块、库和组件如何编译,其中还包含了很多节(Session)标志、包括必要的[Defines]、[Componments]和可选的[LibraryClasses]、[Libraries]、[SkuIds]、[BuildOptions]、[PCD]、[UserExtensions]、[DefaultScores]。所有节的标志都内置于中括号中,而且大小写是敏感的。

Defines:定义了各种变量,以供后续使用,有必要项和可选项

BuildOptions:给出编译器和相关的编译参数

LibraryClasses:用来提供模块所使用的库入口,而且它允许将模块编译成库,这些库可以被[Components]中的模块使用。

Components:用来定义模块编译的节,通过指定模块的INF文件所在的位置,Build工具可以编译生成efi文件。

1.2 DEC文件

每个包只有一个DEC文件,一般和DSC文件成对出现,DEC文件主要声明包的公共数据和接口。

1.3 INF文件

INF文件是模块的工程文件,其后缀名为.inf,描述了模块的属性,包括模块是哪些代码组成、提供了什么、依赖什么库、支持什么CPU架构等信息。EDK2的模块一般位于包的子目录下,提供库的模块一般位于Library子目录下,UEFI_APPLIACTION的例子,一般位于Applications下。

例如:HelloWorld模块的inf文件

1.4 FDF文件

用于描述固件在Flash中的布局和位置,作用是规定把哪些包编入flash中,并确定编入的位置。

1.5 IDF、UNI、VFR文件

IDF图像描述文件

UNI宽字节字符串文件

VFR可视化窗体描述

2、EDK2代码编译流程

1、DEC文件用来配合DSC文件,描述包的公开数据和接口;IDF、UNI、VFR文件可算作资源文件;INF文件配合源代码和资源文件,在Build工具的协助下,生成二进制文件(如efi文件、lib文件)。

2、FDF文件与DSC文件和二进制文件配合生成镜像。

3、总结

dsc文件:edk的平台描述文件,用来描述和编译包。会定义一些变量,设置编译器参数,模块所使用的库的路径,所包含的模块,在编译一个模块的时候,会将模块的inf文件添加到包的dsc文件中。

dec文件:包声明文件,声明包的公共数据和接口,有包提供的头文件的所在目录,库和头文件的对应关系、Protocol的GUID、GUID常量等。

inf文件:模块的工程文件,用来描述模块的属性,里面会定义模块的变量,源文件、所引用的包的dec文件、所用的库、protocol、ppi、pcd等。

fdf文件:描述固件在flash的布局和位置等,有fd、fv、option Rom组成,fd就是固件设备,能够构成一个完整的镜像文件,包含fd基址、fd大小等信息,fv是固件的逻辑区块,相当于fd的分区。定义了镜像包含的组件和模块,和用来编译其它独立固件的Option ROM。

资源文件:IDF(图像描述文件)、UNI(宽字节字符串文件)、VFR(可视化窗体描述)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值