Fork me on GitHub
侧边栏

UEFI原理与编程(四)(dec dsc inf文件)

1 .inf文件

以下面 .inf文件为例

[Defines]     # 块用于定义模块的属性和其他变量,块内定义的变量可被其他块引用
  INF_VERSION          = 0x00010006                            #INF 标准的版本号, 前半部分主版本号,后半次版本号
  BASE_NAME            = Main                    #模块名字字符串,不能包含空格。它通常也是输出文件的名字 Main.efi
  FILE_GUID            = 4ea97c46-7491-4dfd-b442-747010f3ce5f#每个工程文件必须有一个8-4-4-4-12格式的GUID,用于生成固件
  MODULE_TYPE          = UEFI_APPLICATION           # 定义模块的模块类型
  VERSION_STRING       = 0.1                        # 模块的版本号字符串
  ENTRY_POINT          = ShellCEntryLib             # 定义模块的入口函数


[Sources]     # 用于列出模块的所有源文件和资源文件。 可选项体系结构相关块
  Main.c      # 块内每一行表示一个文件,根路径是工程文件所在的目录

[Packages]    # 列出本模块引用到的所有包的包声明文件(.dec 文件)。
  StdLib/StdLib.dec  
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec  # 文件使用相对路径,相对路径的根路径为EDK2的根目录

[LibraryClasses]  #块列出本模块要链接的库模块
  LibC
  LibStdio        # 块内每一行声明一个要链接的库(库定义在包的.dsc 文件中,定义方法将在下文讲述

inf文件是模块的工程文件,其作用相当于Makefile 文件或Visual Studio 的.proj 文件,用于指导EDK2 编译工具自动编译模块;

工程文件分为多个块,每个块以“[ 块名]”开头,“[ 块名]”必须单独占一行。块又分为 工程文件必需块 和 工程文件非必需块

必需块 块描述
[Defines] 定义本模块的属性变量及其他变量,这些变量可在工程文件其他块中引用
[Sources] 列出本模块的所有源文件及资源文件
[Packages] 列出本模块引用到的所有包的包声明文件。可能引用到的资源包括头文件、GUID、Protocol 等,这些资源都声明在包的包声明文件.dec 中
[LibraryClasses] 列出本模块要链接的库模块
非必需块 块描述
[Protocols] 列出本模块用到的Protocol
[Guids] 列出本模块用到的GUID
[BuildOptions] 指定编译和链接选项
[Pcd] Pcd 全称为平台配置数据库(Platform Conf iguration Database)。
[Pcd] 用于列出本模块用到的Pcd 变量,这些Pcd 变量可被整个UEFI 系统访问
[PcdEx] 用于列出本模块用到的Pcd 变量,这些Pcd 变量可被整个UEFI 系统访问
[FixedPcd] 用于列出本模块用到的Pcd 编译期常量
[FeaturePcd] 用于列出本模块用到的Pcd 常量
[PatchPcd] 列出的Pcd 变量仅本模块可用

2 .dsc文件

.inf 用于编译一个模块, 而.dsc 文件用于编译一个Package, 它包含了[Defines]、
[LibraryClasses]、[Components] 几个必需部分以及[PCD]、[BuildOptions] 等几个可选部分。

3 .dec 文件

.dec 文件定义了公开的数据和接口,供其他模块使用。它包含了必需区块[Defines] 以及可选区块[Includes]、[LibraryClasses]、[Guids]、[Protocols]、[Ppis] 和[PCD] 几个部分。
.dec文件需要被调用模块.inf文件所包含。

posted @ 2024-09-10 11:45  yooooooo  阅读(531)  评论(0)    收藏  举报