UEFI开发与调试---edk2中的Module

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.dec
        ShellPkg/ShellPkg.dec
  • [LibraryClasses]
    累出本模块所引用的库,只需要库名称。

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

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

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

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

你可能感兴趣的:(UEFI开发和调试)