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

从MFCC到GMM:手把手教你用Python实现说话人识别(附完整代码)

本文详细介绍了如何使用Python实现说话人识别系统,从MFCC特征提取到GMM模型训练,涵盖完整的技术流程和代码示例。通过梅尔频率倒谱系数(MFCC)和高斯混合模型(GMM)的结合,构建高效的说话人识别系统,适用于身份认证和智能交互场景。文章还探讨了从传统方法到深度学习的进阶话题,如i-vector和x-vector技术。

o1p2q3r的博客 200

关于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

Apollo control模块横向控制原理及核心代码逐行解析

看完这篇文章,你会对apollo横向控制有一个整体的概念

weixin_39199083的博客 2万+

【量化交易】迅投QMT——基础操作新建策略导入策略!

策略指标 #基础操作 #新建策略 在【我的】主页,点击新建策略按钮 点击【pyhton策略】模型 会弹出一个策略编辑器框 【新建策略文件】 编辑完点击【编译】按钮 关闭策略编辑器 导入策略 券商 QMT:1. 点击进入【模型研究】界面2. 右键 -> 选择本地. rzrk导入 投研端:1. 点击【行情】界面,选择模型2. 右键 -> 选择本地. rzrk导入 #策略在副图作为指标运行 在主图上双击策略 VBA策略可以直接输出图像

weixin_eng02048的博客 4108

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

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

3873

用MCP扩展Cursor的5种神奇用法:从文件操作到网页抓取实战

本文深入探讨了如何利用MCP(Model Context Protocol)扩展Cursor AI编程助手,解锁五种高效实用场景。从文件系统操作、网页内容抓取,到数据库查询、Figma设计稿对接,乃至构建自定义MCP服务器,文章通过实战案例展示了如何将Cursor从代码编辑器升级为能理解并操作工作环境的智能助手,显著提升开发效率与自动化水平。

weixin_29231027的博客 315

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

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

4520

基于STM32F103标准库与DMA的实时音频FFT频谱显示系统设计

本文详细介绍了基于STM32F103芯片与DMA技术实现实时音频FFT频谱显示系统的设计方法。通过标准库驱动和FFT算法处理音频信号,结合OLED显示屏实时绘制音乐频谱,涵盖硬件选型、核心原理、开发环境搭建及性能优化等关键步骤,为数字信号处理应用提供实用参考。

yellow的专栏 777

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

本文给出了GTM与EVADC之间关联的细节,并通过两个实例分别说明了如何对寄存器进行配置。

无所适从的我的博客 2932

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

Qt软件开发-Qt编译zlib完成文件压缩解压(win10)

在软件开发中进行有需求需要将生成的一些文件打包上传到服务器,或者从服务器下载压缩包下来内部解压。或者自己做一些打包工具,那么使用zlib开源就可以很方便的完成。接下来介绍在zlib在windows下如何利用Qt进行编译,调用,介绍mingw、msvc,32/64位编译办法,完成zip文件打包生成例子。可以单文件压缩打包,多文件压缩打包,目录压缩打包等等。

2217

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

vue3 - 详细实现内网使用离线高德地图功能,在vue3中无需网络离线使用高德地图相关功能,高德地图如何离线加载详细教程(内网部署及使用),提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制)

vue3,高德地图,离线使用高德地图,高德地图瓦片官方下载,内网使用高德地图离线无网络,断网情况下使用高德地图,vue离线高德地图教程,内网部署高德地图,无需联网离线使用,vue3+ts实现离线高德地图 内网离线高德地图,如何在高德地图Vue3项目中下载离线地图,地图加载不出来,不显示怎么办,内网使用离线高德地图加载失败问题,vue3实现离线地图+高德瓦片,vue3高德离线地图,如何使用离线高德地图和自定义地图样式,高德离线地图的下载,怎么下载高德地图瓦片,一键把所有瓦片都下载下来,离线加载,内网部署,离线

✅ 精选推荐文章 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MacOS/Linux(Unix-like)编译edk2

本文以UDK2018+MacOS为例。

liuencheng2020的博客 535

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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、付费专栏及课程。

余额充值