UDK BaseTools

UEFI中的edk2编译流程 edk2build分为三个阶段:1、Pre-build或者AutoGen:2、Build或$(MAKE)3、Post-build或imageGen阶段。 阅读详情

一,UDK编译时所用到的工具为以下:

build.exe

trim.exe

GenFw.exe

VfrCompile.exe

GenFds.exe

GenSec.exe

GenFfs.exe

GenFv.exe

VS工具(cl.exe, lib.exe, ml.exe,link.exe)


二,编译过程

说明文档里,把编译过程分成两部分:1,所代码编译成EFI模块。 2,将各EFI模块组成一个FD。用代码的语言表示,就是build.exe Modules和build.exe Fds。可是我觉得把编译过程分成三部分更符合coder的思维:1,使用VS将源码编译成二进制文件。2,使用BaseTools里的工具将二进制转成EFI格式。3,将EFI格式文件转成FFS,并组成FV,最后组成一个完整的FD。

下面是以我个人的视角,来分析的编译过程,可能会有出错的地方,大家用一种批判的眼光来看待吧:

1,输入edksetup.bat--nt32时,该批处理会将VS的路径和EFI下的BaseTools添加到环境变量路径,以后再使用一些命令时,不用再加绝对路径。

2,  编译第一步

输入build.exe命令即可编译.

Build.exe是一个主命令工具,提供了一个收集不同编译选项的命令。一般来讲,它检查我们所设的环境变量,收集target.txt里面的配置信息,解析dsc,dec,inf,target.txt,tools-def.txt。利用VS的nmake.exe产生C和H源文件并且为各个模块产生Makefiles;利用cl.exe,ml.exe,lib.exe,link.exe将各个模块编译成二进制文件。

下面是一些比较集合式的参数:

ALL          编译所有东西.

GenC         产生C文件,AutoGen.C,AutoGen.h.

GenMake      产生Makefile文档,

Fds          产生FD文件.

Libraries    编译库文件

Modules      编译指定的模块

Clean        只删除nmake产生的文件

CleanAll     删除所有产生的文件

 

图1,第一步编译



2,  编译第二步

编译过后,使用GenFw.exe,将link和lib后的文件转成efi文件。同时使用vfrcompile.exe将vfr源文件编译成ifr。

 

图2,GenFw和vfrCompile编译




2,  编译第三步

GenFds可以产生Ffs,Fv,FD和Section data。它收集txt,dsc,fdf,dec和inf文件。FDF文件必须遵守正确的FDF规格。

编译的第一阶段产生PE32/PE32+/Coff二进制文件。GenFds执行第二阶段的编译,通过FDF文件的规则定义编译使用第一阶段产生的二进制文件。EFI文件被编成FFS文件,FFS文件组成FV,各个FV区域组成一个或多个FD。

必须指定输出目录,GenFds将产生一个FV目录,包括FFS目录,FV文件,FV INF文件和FD文件。FFS目录包括所有的模块目录,里面包含FFS和SECTION文件。

GenFds所有的输出都必须在FV目录里。所使用的文件为$(outputDir)\$(Arch) \ $(ActivePlatfromName) \$(ModuleName) \$(ModuleName) \DEBUG的所有文件。

1.  如果Arch指定, GenFds将使用编译时指定的,而不是target.txt里写死的。

2.  如果workspace没有指定,GenFds工具将使用操作系统指定的。

3.  如果ActivePlatform指定,GenFds将使用编译时指定的,而不是target.txt里写死的。

 

图3.编译第三步


这一步是整个编译的最后一步。它使用Flash map图fdf文件和-t的工具,产生-a架构的FD文件。我们从该图中可以看到很多-D的参数。有EFI_SOURCE,EDK_SOURCE,TOOL_CHAIN_TAG,TOOLCHAIN,TARGET,WORKSPACE,EDK_TOOLS_PATH,ARCH,ECP_SOURCE,都是一些编译所使用的宏定义。GenFds根据它们可以编译出我们想要的FD。

编译过程中会调用其它一些编译工具,如GenSec.exe,GenFfs,GenFv。

由此可以看出,原来Sec部分代码,还需要单独的一个工具进行处理,看来,在真实平台的BIOS代码,SEC的二进制内容会被调程,甚至机器码都有修改过。我试过在修改BIOS执行的前几条指令,然后查看二进制,在JMP之前的指令可以修改。但JMP指令的地址值无论怎么修改都会被编译器改变为其他值。

GenFfs和GenFv也是编译过程必须用过的工具。一个FD包括N个FV,一个FV包括N个FFS,一个FFS包括一个Module或N个Section。每个FFS都有唯一的GUID标识的HEADER,这样,我们只要知道某个FV的地址,便可以找出所有的FFS了。

UDK2014的编译流程大概就是这些了。


UEFI开发探索57-如使用最新的EDK2搭建编译环境 (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) 最近浏览github上edk2的发布代码,注意到一个问题,现在发布的方式有点不一样了。之前过一段时间,就会发布一个完整的打包源代码,比如2018年3月发布的UDK2018,我一直都用这个开发的。不过,我没有找到UDK2019,更别说UDK2020了。 为什么我关注这个呢?主要是因为这种打好包的源码,整理得比较好,也比较稳定,并且还提供完整的API文档。另外,如果直接git EDK2的主线,编程时会.. 阅读详情

相关推荐

【UEFI实战】EDK编译环境搭建与常见问题解决(2023版)

本文详细介绍了2023年最新版EDK编译环境的搭建步骤,包括Python环境配置、Visual Studio组件选择、源码获取与子模块处理等关键环节。针对UEFI开发中常见的网络子模块下载问题、Python版本冲突等痛点,提供了实测有效的解决方案,帮助开发者快速搭建稳定的EDK编译环境。

weixin_30500105的博客 366

UEFI 代码检查工具Ecc

1、Ecc介绍: Ecc工具是去帮助检查ueif coding style代码规范的,将代码中不符合uefi代码规范风格的daima给检查并输出,官网介绍wiki: https://github.com/tianocore/tianocore.github.io/wiki/ECC-tool Ecc工具目录: edk2/BaseTools/Source/Python/Ecc 初次使用Ecc: 1、在...

wangyongh的博客 3012

手把手教你搭建UEFI开发环境:从Windows到龙芯平台的完整指南

本文提供了一份从Windows到龙芯平台的完整UEFI开发环境搭建指南。文章详细阐述了UEFI开发的核心组件与特殊性,并分步讲解了在Windows上为X86平台、在Linux上为X86平台交叉编译,以及最具挑战性的为龙芯(MIPS)平台搭建交叉开发环境的实战流程,涵盖了工具链选择、环境配置、编译调试等关键编程实践,旨在帮助开发者系统掌握跨平台UEFI开发能力。

a1b2c的博客 248

UEFI之Basetools技巧总结

概要 在EDK2中没有编写Makefile的过程,终止是通过Basetools生成编译文件和Makefile的,但是在我们使用中总是感觉没有使用Makefile顺手,所以这里进行总结; 生成静态库进行编译 这个过程就是,我编译生成一个静态库.lib文件,然后提供别人或自己在以后的编译中使用,省去了重新编译的时间,也可以实现只提供静态库和.h给别人使用; 这里以OpensslLib.inf为例,由于OpensslLib编译非常的慢,所以我就将它做成了一个静态库; [Defines] INF_VERSION

极客驿站 2042

UEFI固件开发与Intel UDK2010实战培训手册

UDK2010的构建系统由多个核心组件组成,主要包括Build工具链和BaseTools。这些组件共同构成了一个完整的UEFI固件开发环境。UEFI驱动开发遵循模块化设计原则,开发者需要按照一定的流程进行开发和测试。

weixin_42451850的博客 828

Python实现生成简单的Makefile文件代码示例

主要介绍了Python实现生成简单的Makefile文件代码示例,本文给出了两段实现代码,需要的朋友可以参考下

高通平台bsp 编译BaseTools 出错

错误信息/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]防御性编译选项触发了该警告,一般是由于strncat, strncpy 等等函数有可能导致不安全越界,GCC把这种警告当成错误。

mewei的专栏 729

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 605

关于Eclipse C++出现Launch failed,Binary not found问题的解决方案(Win7环境下)

查询网址: http://blog.sina.com.cn/s/blog_88fcfaba0101755q.html 第一步:安装MinGW 第二步,选择Download and install,下一步,再下一步,选择Current。到了下面的画面,只要把MinGW base tools和G++ compiler选上就OK了(即前两项) 第三步:配置MinGW的环境变量 右键我的电脑->属性->高级系统设置->环境变量 在里面依次按照如下步骤添加修改: 1.新建MINGW_HOME变量,

Kelley_的博客 1055

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 458

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1431

UEFI开发探索03 – 环境搭建2

(请保留->作者:罗冰) 从上次写完博客,过去了一个多月。中间到深圳出差,解决一个硬盘加密的项目,时间就这么过去了。等回过神来,发现写博客的计划又往后拖了。 下定决心,我想在这周搞定编译环境。 以前我是在XP下,使用UDK2010来编译的,比如这个: 图1 VS2008+UDK2010开发的uefi application 我原本的计划是用Ubuntu 16来搭建环境。最近正...

3873

Android HAL 架构详解,底层开发不再难

HAL Binder 这套机制牛在哪?性能:一次拷贝,快如闪电。规范:HIDL 让接口定义整齐划一,维护省心。兼容:版本管理做得好,新老设备都能跑。有了这套通信体系,HAL 就像打了通脉,上下贯通,硬件操作变得丝滑无比。通信机制搭好了桥,接下来 HAL 得真正把手伸到硬件上。这部分是 HAL 的 “最后一公里”,直接决定硬件能不能被用起来。HAL 的接口定义是整个体系的灵魂,它决定了上层和底层怎么 “说话”。

大模型大数据攻城狮的专栏 1673

UEFI开发探索22 – 环境搭建3(使用UDK2018搭建)

(请保留-> 作者: 罗冰) 之前搭建UDK2017和UDK2018失败,我只能使用以前的开发环境WinXP+UDK2010来调试程序。总感觉自己像个史前程序员,XP下很多工具都没法使用的。比如我想看某个函数的定义,只能使用TotalCmd全文件夹搜索,感觉很不爽。 今天去公司加班,广州有客人来访。下午送走客人后,我盯着以前写的“搭建环境”的博客,下定决心,一定要用上win10+UDK2...

4520

【图像检测】基于MATLAB的火灾监测系统设计

1 简介 针对传统火灾监测系统对于大空间的室内场合和开阔的室外环境易失效的问题,提出了一种结合火灾火焰特征和烟雾特征来进行判断的数字图像型火灾监测算法.火焰颜色特征是基于RGB颜色模型中的R,G,B三基色分量和它们之间的关系来判断是否有火焰发生,烟雾模型特征是图像灰度化预处理后,基于HIS空间模型提取的,通过计算像素点与基准像素点之间距离D的大小来判断是否有火灾发生.对提出的算法进行MATLAB仿真,并和传统的基于五种算子的边缘检测算法提取火焰烟雾特征进行对比.实验结果表明,提出的火焰特征和烟雾特征提取算

qq_59747472的博客 2797

Spring AI 项目实战(一):Spring AI 核心模块入门

摘要:本文探讨了Spring Boot与Spring AI在Java生态下开发智能应用的技术融合。Spring Boot通过自动配置和嵌入式服务器简化企业级应用开发,其核心架构包括Spring Application和Web MVC框架。Spring AI则提供标准化接口,整合Hugging Face、TensorFlow等AI引擎,模块化支持NLP、CV和ML任务。文章通过代码示例展示了文本分类、图像处理和机器学习预测的实现,为开发者提供了Java生态下高效构建AI应用的解决方案。

博客 1528

UDK2安装

安装vs2015 ,将编程语言中的C++选上。 安装python2.7 将nasm安装到C:\nasm 解压isal.zip至 C:\asl (注意文件夹名字发生了改变) 解压openssl-OpenSSL_1_1_0g.zip,里面的文件移动到UDK目录下vUDK2018\CryptoPkg\Library\OpensslLib\openssl 解压openssl-1.0.2a-win64-mingw.zip至C盘根目录,改名为Openssl(大小写无影响) 以上完成后,均不...

qq_42474494的博客 696

dolphinscheduler集群服务一键安装启动实现流程剖析

通过以上分析我们基本梳理清楚了整个dolphinscheduler项目的一键安装启动逻辑, 我们现在在通过一张图正好理一下整个实现流程。关于一键停止集群服务及一件查询集群各个角色服务实例运行状态的实现也都在stop-all.sh/status-all.sh及dolphinscheduler-daemon.sh这三个脚本中, 有兴趣自行研究。写这篇文章的核心目的不仅在于给大家分享如何优秀的开源项目的一键安装部署的实现过程。

最爱嫣夜来 1207

UEFI学习开发(1)Ubuntu18.04搭建EDK2编译环境

UEFI开发大多在windos下进行,但是习惯使用gcc编译的我来说还是想在Ubuntu环境下开发调试uefi,下面来介绍一下在Ubuntu18.04环境下搭建udk2018编译环境 具体步骤可以参考一下:https://ay123.net/668.html 在这里描述一下我在搭建编译环境的时候遇到的问题: 问题1:在编译Basetools时报错“can not be used when m...

qq_28643619的博客 3359

Codex入门01-环境安装(小白入门:手把手教你安装配置,国内网络也能搞定)

本文手把手教你从零搭建 Codex CLI 开发环境。内容涵盖 Node.js 安装(macOS/Windows/Linux)、Codex CLI 全局安装、ChatGPT 账号登录认证,以及国内网络代理配置。还包括常见问题排查和一键启动脚本编写。跟着截图一步步操作,10分钟搞定全部环境,开始用AI写代码!

yueyeguzhuo的专栏 345

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MacOS/Linux(Unix-like)编译edk2

本文以UDK2018+MacOS为例。

liuencheng2020的博客 535

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

UEFI学习 (一) ——下载与编译

本文介绍了在Win10主机和Ubuntu 18.04虚拟机环境下配置EDK2开发环境的步骤。主要内容包括:通过Gitee镜像下载EDK2代码并切换到UDK2018分支;编译基础工具和BIOS固件;使用QEMU运行编译好的OVMF.fd,并配置串口输出。特别说明了如何通过虚拟串口软件vspd实现将Ubuntu虚拟机中的QEMU串口输出重定向到Windows主机的串口终端上,需要以root权限执行QEMU命令。整个流程为UEFI开发提供了基础环境搭建指南。

cs_clo的博客 1342

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

EDK2 UDK2018的环境搭建

参考:https://github.com/tianocore/edk2/releases UDK2018:https://github.com/tianocore/edk2 新人上路,在参考了网上的大多安装及环境搭建教程后仍未成功搭建EDK2的环境后,最终重装电脑后搭建成功,写下这篇博客希望能帮助到有需要的人。 1.下载VS。在UDK2018中我所使用的VS2017是受支持的,因此没必要去...

qq_39155263的博客 7243

EDK2构建工具链变迁:从手动编译BaseTools到Python化Build,我的环境配置心得

本文详细介绍了EDK2构建工具链从手动编译BaseTools到Python化Build的变迁过程,分享了作者在环境配置中的实战经验。文章对比了新旧版本的核心差异,提供了可靠的构建环境搭建方法,并解析了构建OVMF的完整流程,帮助开发者高效迁移到新版EDK2。

weixin_33521678的博客 290

EDK2环境搭建--Windows

EDK2的最新环境搭建,都3202年了,不会还有人用老版本的Tool去搭建EDK2环境吧

weixin_45450696的博客 4601
上一篇: BIOS工程师手边事—Keyboard
下一篇: BIOS工程师手边事--SMM模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值