UEFI原理与编程(五):UEFI工程模块文件-库模块

UEFI工程模块文件-库模块

前言

  在传统C/C++项目开发中经常会用到库,在UEFI大型工程项目开发中也是这样的。EDK2也提供库模块,来实现它。

一、库模块的工程文件

1. 语法  

  基本语法和前面文章讲到的用法相似,但是需要注意一下几点:

  • [Defines]块
    • MODULE_TYPE设置为BASE
    • LIBRARY_CLASS设置为库名字
    • 不需要设置ENTRY_POINT
  • [Packages]
    列出库引用到的包
  • [LibraryClasses]列出包所依赖的其它库

2. 使用注意事项

  • 有些库只能被某些特定的模块调用,所以在使用的时候要声明库的使用范围,声明方法是在[Defines]块的LIBARAY_CLASS变量中定义,格式如下:
     LIBRARY_CLASS = 库名称 | 适用模块类型1 适用模块类型 2
LIBRARY_CLASS = zlib | UEFI_APPLICATION
  • 编写好库后,要是库能被其它模块调用,还要在包的.dsc文件中声明该库。在[LibraryClasses]添加库模块的工程文件路径即可。
[LibraryClasses]
    zlib | zlib/zlib.inf
  • 调用库模块时,只需要在调用模块的工程文件中将被调用的库模块的库名假如[LibraryClasses]列表即可。
[LibraryClasses]
    zlib
  • 有些库使用之前需要进行初始化,在库的工程文件中需要指定CONSTRUCTORDISTRUCTORCONSTRUCTOR会加入到ProcessLibraryConstructorList中,这个CONSTRUCTOR函数会在ENTRY_POINT之前执行;DESTRUCTOR函数会加入到ProcessLibraryDestructorList中,这个DESTRUCTOR会在ENTRY_POINT之后执行。
//例如:在zlib调用之前需要用InitializeLib()中初始化,在zlib调用之后需要LibDestructor清理zlib库占用的资源需要进行下面设置
[Defines]
CONSTRUCTOR = InitializeLib
DESTRUCTOR  = LibDestructor

二、总结

  库文件的使用,需要注意上面的几点注意事项。万变不离其宗,UEFI工程模块是存在相似性的,在使用中慢慢就得其道了。

参考资料

<1> 《UEFI原理与编程》 戴正华著。

你可能感兴趣的:(UEFI,原理与编程学习笔记,uefi)