【UEFI基础】EDK框架

什么是EDK

EDK全称EFI Developer Kit,它实际上是一套实现了UEFI标准的开源代码,开发者可以在此基础上开发UEFI下的设备驱动或者其它应用。

EDK发展到现在已经经历了几代了,早期有EFK,后来是EDK,到现在的EDKII。EDKII兼容EDK,目前这两者都有使用,并且通常会混合使用。

本文主要以EDKII为介绍对象。

下载

EDK是开源的,因此可以在网上下载到。在GitHub或者SourceForge上都可以找到相关的代码。

GitHub地址:GitHub - tianocore/edk2: EDK II

SourceForge地址:EDK II download | SourceForge.net

EDK的架构

下面是EDKII的目录结构:

除了配置和编译工具之外,EDKII的其它部分都是一个个的Package,以xxxPkg为名。

xxPkg将EDKII代码分成了一个个的大模块,如下图所示:

各个模块之间可以独立编译,不过某些模块需要依赖于其它的模块:

由于Package的个数在不断增加,比如上面的代码是2016年下载的,相比我上一份下载的2014年的代码,xxPkg已经多了不少了,所以上图并没有完整得包含左右的Package。从上图中可以看到有几个模块比较基础,尤其是MdePkg和MdeModulePkg,他们提供了UEFI的基础。

打开某个xxPkg,以ShellPkg为例:

其中有一个同名的.dsc文件,通常编译的时候会指定一个.dsc文件,表示编译该目录下的代码。.dsc文件中包含了大量的inf文件,它们是编译的最小单位,通常表示的就是一个模块:

除了.dsc文件和.inf文件,EDKII中还有一个比较重要文件是.fdf文件,它负责确定哪些模块是会被放到UEFI二进制中的,当然前提是这些模块已经通过.dsc文件指定编译。

简而言之,模块是EDKII的最小单位,它表示的可以是一个驱动或者驱动的一部分,也可以是提供某些功能的库或者Protocol(Protocol是UEFI中的一个编程模型,类似与面向对象编程里面的类),每个模块包含一个.inf文件用来指定源代码和入口;.dsc文件用来将.inf文件组织起来进行编译,.fdf文件也是用来将.inf文件组织起来,但是它的目的是为了整合成完整的二进制。

从.inf/.dsc/.fdf到二进制的编译过程大致如下:

这中间的Parsing Tool是用Python脚本、C、C++等写成的,可以在BaseTools目录下找到所有的工具和使用方法。

以上是关于EDK框架的介绍,具体的编译可以参考下面的文章:

【UEFI实战】OVMF基础

【UEFI实战】在Windows下运行UEFI BIOS(Nt32篇)

  • 3
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值