UEFI之Basetools技巧总结

2024-05-29 03:48
文章标签 总结 技巧 uefi basetools

本文主要是介绍UEFI之Basetools技巧总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概要

在EDK2中没有编写Makefile的过程,终止是通过Basetools生成编译文件和Makefile的,但是在我们使用中总是感觉没有使用Makefile顺手,所以这里进行总结;

生成静态库进行编译

这个过程就是,我编译生成一个静态库.lib文件,然后提供别人或自己在以后的编译中使用,省去了重新编译的时间,也可以实现只提供静态库和.h给别人使用;

这里以OpensslLib.inf为例,由于OpensslLib编译非常的慢,所以我就将它做成了一个静态库;

[Defines]INF_VERSION                    = 0x00010005BASE_NAME                      = OpensslLibMODULE_UNI_FILE                = OpensslLib.uniFILE_GUID                      = C873A7D0-9824-409f-9B42-2C158B992E69MODULE_TYPE                    = BASEVERSION_STRING                 = 1.0LIBRARY_CLASS                  = OpensslLib
# DEFINE OPENSSL_FLAGS           = -DL_ENDIAN -DOPENSSL_SMALL_FOOTPRINT -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DNO_SYSLOG[Binaries.MIPS64EL]Lib|OpensslLib.lib
[Binaries.LOONGARCH64]Lib|OpensslLib_LA.lib

Binaries就是指定静态库的,后面可以跟架构类型;下面指定静态库的位置和名字,在dsc文件中指定即可完成编译;如下:

OpensslLib                       | Capsule/Library/OpensslLib/OpensslLib.inf

类似的方法也可以将.efi添加进行编译;如下:

[Binaries.MIPS64EL]Efi|OpensslLib..efi

在inf指定头文件目录

正常思路是在dec中指定头文件的目录,但是有时我们的头文件不想所有文件都包含,因为那样会出现定义冲突,所以想在inf中指定include的路径,想法是在BuildOptions的FLAGS中添加,但是发现这个只能实现但.h 的添加,
GCC:*_*_LOONGARCH64_CC_FLAGS == -IInclude/Library会报错,无法进行编译;发现在编译Openssl时生成一个cc_resp.txt文件,里面都是编译中要链接的路径,不只是dec中指定的,但是也没有找到其他的地方;

现在的解决办法,添加一个单独的dec进行实现,如下:
Universal/Capsule/Capsule.dec

[Defines]DEC_SPECIFICATION              = 0x00010005PACKAGE_NAME                   = CryptoPkgPACKAGE_UNI_FILE               = CryptoPkg.uniPACKAGE_GUID                   = 36470E80-36F2-4ba0-8CC8-937C7D9FF888PACKAGE_VERSION                = 0.98[Includes]Include/BaseCryptLib[Includes.Common.Private]Library/OpensslLib/openssl/includeLibrary/OpensslLib/openssl/crypto/include[LibraryClasses]##  @libraryclass  Provides basic library functions for cryptographic primitives.##BaseCryptLib|Include/Library/BaseCryptLib.h

指定编译或链接对应的.h

在inf文件中

[BuildOptions]
GCC:*_*_LOONGARCH64_CC_FLAGS == -include Include/Library/BaseCryptLib.h

CC 是编译中使用
DLINK 是链接使用

FDF 中直接包含文件

  • 直接包含二进制文件
    在对应的Section 下添加如下内容
    !include AmiModulePkg/NVRAM/NvramFdfFileStatement.txt
    NvramFdfFileStatement.txt 内容如下:
 FILE RAW = CEF5B9A3-476D-497f-9FDC-E98143E0422C {$(OUTPUT_DIRECTORY)/Nvram.bin}
  • 直接包含文件
FILE RAW = 812136D3-4D3A-433A-9418-29BB9BF78F6E { # gEdkiiSystemFmpCapsuleConfigFileGuid
Universal/Capsule/SystemFirmwareUpdateConfig/SystemFirmwareUpdateConfig.ini
}

更多详细使用可以查看UEFI之FDF

驱动中的依赖

写驱动时在哪inf文件中必须包含[Depex],作用是指定依赖的服务或设备,如何没有,驱动是不加载的,输出如下:

Driver 4A9B9DB8-EC62-4A92-818F-8AA0246D246E was discovered but not loaded!!
Driver AE587172-CC15-48E1-8BE0-29DDF05C6A1F was discovered but not loaded!!
Driver 8F2C127E-117D-484B-8A44-FBD911BE125E was discovered but not loaded!!
Driver 129F6AA7-AB69-4CB8-AED1-40985001115E was discovered but not loaded!!
Driver BC0B9FB8-97CF-4B17-9A9E-F574E62CBCC4 was discovered but not loaded!!
Driver 43788BEB-638F-434C-8A84-46D33A589E76 was discovered but not loaded!!

想强制加载,如下:

[Depex]TRUE#gEfiDxeIpmiTransportProtocolGuid

这篇关于UEFI之Basetools技巧总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1012559

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa