Edk2在设计是按照模块来进行的,其中模块包含有很多种类型,比如最常见的三种:应用程序模块,驱动模块,库模块。每个模块都包含了一个工程元数据文件(.inf)和源文件。.inf文件是用来辅助编译的,功能类似于Makefile;而源文件就是功能代码的实现了。本文主要用来介绍.inf的编写规则。

类似于前文介绍的.dsc和.dec文件,工程元数据文件(.inf)也是由一系列块组成,它们有一些是必需块: [Defines],[Sources], [Packages], [LibraryClasses],和一些可选块:[Protocols],[Guids],[BuildOptions], [Pcd], [FixedPcd], [PcdEx], [Protocols]。

下面将挑选一些常用的块进行详细讲解:

  • [Defines]
    此块用来定义模块的属性和其他变量,块内定义的变量可被本文件中的其他块引用。

    [Defines]
    INF_VERSION                    = 0x00010006
    BASE_NAME                      = Hello
    FILE_GUID                      = a912f198-7f0e-4803-b908-b757b806ec83
    MODULE_TYPE                    = UEFI_APPLICATION
    VERSION_STRING                 = 0.1
    ENTRY_POINT                    = ShellCEntryLib

    INF_VERSION,INF标准的版本号,build会根据此版本号来解析本文件,通常将此版本好设置为 0x00010006即可;BASE_NAME是模块名字; FILE_GUID每个工程必须要有一个8-4-4-4-12类型的Guid,用于生成固件;MODULE_TYPE为模块类型,UEFI_APPLICATION表示是APP类型。VERSION_STRING表示该模块的版本号; ENTRY_POINT定义的是模块入口函数,比如这里的ShellCEntryLib。

  • [Sources]
    此块用于列出本模块所有的源文件和资源文件,可以通过后跟平台名称的方式来区分不同平台。
    示例:

    [Sources]Hello.c
    [Sources.IA32]CpuIA32.c
    [Sources.X64]CpuX64.c
  • [Packages]
    列出本模块所引用的所有包的声明文件(.dec)。

    [Packages]MdePkg/MdePkg.decShellPkg/ShellPkg.dec
  • [LibraryClasses]
    累出本模块所引用的库,只需要库名称。

    [LibraryClasses]UefiLibShellCEntryLib         
  • [Protocols]
    列出本模块所使用的Protocol,其实是Protocol对应的GUID。

    [Protocols]gEfiDhcp4ServiceBindingProtocolGuid           # PROTOCOL ALWAYS_CONSUMEDgEfiDhcp4ProtocolGuid                         # PROTOCOL ALWAYS_CONSUMED
  • [Guids]
    列出本模块所使用的Guids。方法和上面[Protocols]一样。

  • [BuildOptions]
    定义该模块的编译选项,格式如下:

    [BuildOptions.$(Arch).$(CodeBase)]
    [编译器]:[$(Target)]_[Tool]_[$(Arch)]_[CC|DLINK]_FLAGS=
    

UEFI开发与调试---edk2中的Module相关推荐

  1. UEFI开发与调试---edk2中的应用模块/库模块/驱动模块

    应用模块 应用模块包含标准应用程序模块,shell应用程序模块,以及main应用程序模块 标准应用程序模块 它是所有其他应用程序模块的基础,作为一个模块来说,同样由源文件和工程文件(.inf)组成. ...

  2. UEFI开发与调试---edk2中的Package

    在开始编写UEFI APP之前,我们需要先对UEFI包和模块的概念有个了解. 在edk2的根目录下,我们可以发现有很多*Pkg命令的目录,这些实际上都是各个不同的包,每个包中都是一组模块的集合,每个包 ...

  3. UEFI开发与调试--edk2中的基础组件

    还记得前面介绍的MdePkg和MdeModulePkg吗?这两个包中会实现UEFI内核中的基础组件,其中就包括了系统表,启动服务表,运行时服务表. 系统表(System Table) 系统表是edk2 ...

  4. UEFI开发探索97 – EDK2模拟器搭建网络环境

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) EDK2模拟器搭建网络环境 1 搭建EDK2开发环境 1)工具安装 2)下载代码库 3)更新子模 ...

  5. [UEFI开发] Linux Ubuntu EDK2环境搭建

    UEFI开发EDK2环境搭建(Ubuntu - Linux X86_64) UEFI是什么? 开发系统环境的选择--Linux 正文 安装工具 1.获取EDK 2代码 2.修改配置文件 3.编译Bas ...

  6. 使用Xilinx K7 KC705开发板调试PCIe中的问题【持续更新】

    开发板:Xilinx K7 KC705 软件:ISE14.7 1.由于应用需求,我们要将开发板作为主机端,通过PCIe接口转接板外接一个NVMe PCIe SSD.并由FPGA控制SSD的数据读写. ...

  7. UEFI开发与调试---QEMU虚拟盘的创建与修改

    支持的文件格式 qemu支持多种类型的文件系统,而最原生的以及最灵活的是qcow2类型了,这种文件系统支持写时复制,加密,压缩以及VM快照. 除了这种文件系统之外,如下类型也是被支持的:raw ,cl ...

  8. 移动app开发,调试过程中,手机端浏览器无法正常访问接口

    问题描述:前后端分离开发过程中,在本地启动一个tomcat服务后,pc端的浏览器可以访问接口,但是移动端的却访问不到 解决方案: 1 将pc和移动端放在同一个局域网内(连接wifi) 2 将pc端的C ...

  9. 飞腾FT2000/4 u-boot/UEFI开发环境搭建

    参考 UEFI开发与调试-edk2中子目录介绍 ACP基础--Resource Descriptors for ACPI ubuntu16.04操作系统下的edk2安装 [UEFI实战]如何在OS下获 ...

最新文章

  1. Logstash配置总结和实例
  2. 在word 2007中插入复选框
  3. java递归深度克隆_递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。...
  4. Repeating Decimals (计算循环小数)
  5. Chrome DevTools 调研笔记
  6. java mybatis 教程_(整理)MyBatis入门教程(一)
  7. GitHub上如何删除fork别人的repository
  8. 如何统计当前Spark程序有多少分区?
  9. 3.2 Hadoop生态
  10. 微信小程序开发流程、开发者工具下载安装
  11. xvidcore-1.3.2\xvidcore\dshow 工程编译
  12. linux 命令详解 大于号_Linux 命令出现号(大于号)如何退出[组图]
  13. 直播平台搭建源码,css预加载旋转动画 与 流光字体
  14. 方舟神器/贡品代码大全
  15. TFN TT70网络综合分析仪性能如何
  16. Django的多表查询操做
  17. 面试字节跳动测试岗位一般问什么测试点_字节跳动校招流程详解(附带笔试真题+面经)...
  18. c语言函数内判断嵌套常见错误,c语言不等于(c语言多个if函数怎么嵌套)
  19. 【谷粒学院】001-项目概述、Mybatis Plus入门
  20. 消息队列KafKa的集群部署

热门文章

  1. 百度搜索稳定性问题分析的故事
  2. python通过调用百度天气API接口获取天气信息
  3. Theano安装教程
  4. 传奇世界私服务器端制作,关于内网架设传奇世界私服问题的一些解答
  5. Cocos Shader入门基础七:一文彻底读懂深度图。
  6. Opencv或python中图像与三维数组原理
  7. 智能卡CPU卡开卡指令
  8. JavaScript—箭头函数
  9. C++ 语法 const限定符
  10. java去除字母_java 字符串中去除 数字 字母 符号amp;amp;N*1*senten.Length=gt;M*M