UEFI入门(二):edk2项目编译流程
UEFI入门(二):edk2项目编译流程
- 一、编译构建流程:
- 1. 安装依赖工具
- 2. 初始化构建环境
- 3. 配置工具链和目标
- 4. 定义平台配置
- 5. 构建并编译
- 二、uefi-tools编译edk2实践:
- 1. 克隆EDK2 项目
- 2. 构建并编译
- 参考文章:
一、编译构建流程:
1. 安装依赖工具
在开始编译之前,需要确保所有依赖工具已经安装并配置好,主要包括:
1)编译工具链(如 GCC、Clang、MSVC、ARMCC 等)
2)构建工具(如 BaseTools 中的 GenFds、GenFw 等工具)
3)Python(用于运行构建脚本)
4)NASM(汇编器)
2. 初始化构建环境
通过运行 edksetup.sh 或 edksetup.bat(视操作系统而定)来初始化构建环境。
3. 配置工具链和目标
在 Conf 目录中配置构建参数。主要的配置文件包括:
1)target.txt:定义构建目标模式(DEBUG、RELEASE)、工具链标签(如 GCC5、VS2019 等)、目标架构(如 X64、IA32、AARCH64 等)。
2)tools_def.txt:定义每种工具链的路径和编译选项。
3)build_rule.txt:定义如何编译和链接各个文件类型。
4. 定义平台配置
每个平台有其对应的 .dsc 文件(平台描述文件)和 .fdf 文件(固件描述文件),用来定义要构建的平台、所包含的模块、库、驱动程序,以及固件映像的布局。.dsc 文件是编译每个模块的主要参考,而 .fdf 文件是生成固件映像时的重要文件。
5. 构建并编译
使用 build 命令来启动构建过程。该命令会读取 target.txt 和 .dsc 文件中的配置信息,调用相应的编译器和工具链来构建模块。
在构建过程中,build.py 脚本会执行以下步骤:
1)解析配置文件:解析 .dsc 文件中的平台配置和模块定义,确定需要编译的模块和库
2)依赖分析:分析模块之间的依赖关系,确保各个模块按正确的顺序编译
3)编译源码:根据工具链配置调用编译器(如 gcc、clang 等)编译源文件(.c、.cpp、.asm 等),生成目标文件(.obj)
4)链接生成模块:将生成的目标文件通过链接器(如 ld、link 等)链接为可执行的二进制文件(如 .efi 文件)
5)生成固件映像:根据 .fdf 文件定义的固件布局,使用 GenFds 工具将各个二进制模块打包成固件映像文件(如 .fd、.rom、.bin 等)。生成的映像文件通常位于 Build/ 目录中,常见的格式有:
.fd:Firmware Descriptor(固件描述文件),是完整的固件映像文件。
.rom:BIOS ROM 文件。
.bin:可执行的固件映像文件。
二、uefi-tools编译edk2实践:
使用 uefi-tools 编译 UEFI 固件的流程与传统的 EDK2 构建有所不同,它通过封装更简化了编译过程。
1. 克隆EDK2 项目
git clone https://github.com/tianocore/edk2.git
然后,进入 EDK2 目录并获取所需的子模块:
cd edk2
git submodule update --init
2. 构建并编译
../uefi-tools/edk2-build.sh -p MyPlatformPkg/MyPlatformPkg.dsc -a X64 -t GCC5 -b DEBUG
-p:指定平台描述文件路径。
-a:指定目标架构(如 X64、IA32)。
-t:指定工具链标签。
-b:指定构建模式(DEBUG 或 RELEASE)。
参考文章:
UEFI中的edk2编译流程_edk2代码走读
【UEFI实战】EDK的编译流程说明
相关文章:
UEFI入门(二):edk2项目编译流程
UEFI入门(二):edk2项目编译流程 一、编译构建流程:1. 安装依赖工具2. 初始化构建环境3. 配置工具链和目标4. 定义平台配置5. 构建并编译 二、uefi-tools编译edk2实践:1. 克隆EDK2 项目2. 构建并编译 参考文章ÿ…...
局域网一套键鼠控制两台电脑(台式机和笔记本)
服务端(有键盘和鼠标的电脑作为服务端) 下载软件 分享文件:BarrierSetup-2.3.3.exe 链接:https://pan.xunlei.com/s/VO66rAZkzxTxVm-0QRCJ33mMA1?pwd4jde# 配置服务端 一, 二, 客户端屏幕名称一定要和…...
最新Nessus2024.9.8版本主机漏洞扫描/探测工具下载Windows版
Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上遥控,进行系统的漏洞分析扫描…...
关于使用 @iconify/vue2图标库组件的离线使用
Iconify 是最通用的图标框架,将各种图标库的图标集中在这里的一个组件库,例如ant-design,element-ui等 网站地址如下 https://iconify.design/getting-started/ 1.安装依赖 这两个包提供了图标组件和离线图标数据的支持。 npm install iconify/vue2 i…...
pdfmake生成pdf的使用
实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdf…...
PLM系统有哪些品牌推荐?国内不错的PLM厂商有哪些?
在当今快速变化的商业环境中,产品生命周期管理PLM系统已成为企业技术创新和管理创新的重要工具。PLM系统涵盖了产品从概念设计到市场推出、使用维护直至最终报废的整个生命周期,通过整合与产品相关的所有信息,助力企业实现高效、协同的产品开…...
Linux网络:网络套接字-TCP回显服务器——多进程/线程池(生产者消费者模型)
1.多进程版本 这里选择创建子进程,让子进程再创建子进程。父进程等待子进程,子进程的子进程处理业务逻辑。因为子进程是直接退出,子进程的子进程变成孤儿进程被系统管理,所以父进程在等待的时候不是阻塞等待的,所以可…...
Redis 篇-深入了解基于 Redis 实现消息队列(比较基于 List 实现消息队列、基于 PubSub 发布订阅模型之间的区别)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 消息队列的认识 2.0 基于 List 实现消息队列 2.1 基于 List 实现消息队列的优缺点 3.0 基于 PubSub 实现消息队列 3.1 基于 PubSub 的消息队列优缺点 4.0 基于 St…...
python 学习一张图
python学习一张图,python的特点的是学的快,一段时间不用,忘记的也快,弄一张图及一些入门案例吧。 写一个简单的测试: #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…...
通过Docker部署 MongoDB 服务器
今天我们将在三丰云的免费服务器上进行 MongoDB 的部署测试。这款不错的免费服务器提供了很好的性能,1核CPU、1G内存、10G硬盘和5M带宽,足以满足我们的基本需求。三丰云的服务稳定,操作简单,真是一个值得推荐的选择,特…...
无人机避障雷达技术详解
随着无人机技术的飞速发展,其应用领域已经从最初的军事领域扩展到商业、农业、建筑巡检、应急救援、物流运输等多个领域。在这些多样化的应用场景中,无人机的安全性和稳定性显得尤为重要。无人机避障技术作为保障无人机安全飞行的核心技术之一࿰…...
2009-2023年上市公司华证esg评级评分数据(年度+季度)(含细分项)
2009-2023年上市公司华证esg评级评分数据(年度季度)(含细分项) 1、时间:2009-2023年 2、来源:整理自wind 3、指标:证券代码、年份、证券简称、评级日期、综合评级、综合得分、E评级、E得分、…...
C++ 模板进阶知识——stdenable_if
目录 C 模板进阶知识——std::enable_if1. 简介和背景基本语法使用场景 2. std::enable_if 的基本用法示例:限制函数模板只接受整数类型 3. SFINAE 和 std::enable_if示例:使用 SFINAE 进行函数重载SFINAE 的优点应用场景 4. 在类模板中使用 std::enable…...
国内外ChatGPT网站集合,无限制使用【2024-09最新】~
经过我一年多以来,使用各种AI工具的体验,我收集了一批AI工具和站点 这些工具都是使用的最强最主流的模型,也都在各个领域里都独领风骚的产品。 而且,这些工具你都可以无限制地使用。 无论你是打工人、科研工作者、学生、文案写…...
如何在VUE3中使用函数式组件
在Vue 3中,函数式组件的概念与Vue 2相似,但实现方式有所不同。函数式组件是一种无状态、无实例的组件,它们只根据传入的props和context来渲染输出。在Vue 3中,你可以通过定义一个函数并返回一个渲染函数来使用函数式组件。但是&am…...
linux访问外网的设置
Ubuntu | LUCKFOX WIKI 开发板配置 添加路由信息 sudo route add default gw 172.32.0.100添加 DNS servers 打开文件 sudo vi /etc/resolv.conf添加以下内容: nameserver 8.8.8.8联网测试 ping www.baidu.com开机自动配置 路由信息和 DNS servers 重启后会被清除,我们创建…...
PHP轻松创建高效收集问卷调查小程序系统源码
轻松创建,高效收集 —— 问卷调查小程序,你的调研神器! 一、告别繁琐,一键开启调研之旅 还在为设计问卷、收集数据而头疼不已吗?现在,有了“问卷调查小程序”,一切都变得轻松简单!无…...
Redis面试必问:Redis为什么快?Redis五大基本数据类型
请记住胡广一句话,所有的中间件所有的框架都是建立在基础之上,数据结构,计算机网络,计算机原理大伙一定得看透!!~ 1. Redis快的秘密 相信大部分Redis初学者都会忽略掉一个重要的知识点,Redis…...
InternVL2- dockerfile环境变量持久化使用`ENV`而不是`RUN export`来设置环境变量,以确保环境变量在容器运行时仍然可用
在Dockerfile中使用RUN export命令设置环境变量并不是一种持久化的方式。当你在Dockerfile中使用export命令时,它只会在当前构建阶段生效,并不会被持久化到生成的镜像中。这是因为export命令实际上是在shell环境中设置环境变量,而Docker构建过…...
Python(PyTorch和TensorFlow)图像分割卷积网络导图(生物医学)
🎯要点 语义分割图像三层分割椭圆图像脑肿瘤图像分割动物图像分割皮肤病变分割多模态医学图像多尺度特征生物医学肖像多类和医学分割通用图像分割模板腹部胰腺图像分割分类注意力网络病灶边界分割气胸图像分割 Python生物医学图像卷积网络 该网络由收缩路径和扩…...
新能源场站通信实战:IEC104与Modbus TCP协议网关开发要点与配置指南
新能源场站通信实战:IEC104与Modbus TCP协议网关开发要点与配置指南 在新能源场站的监控系统中,协议转换网关扮演着至关重要的角色。光伏电站的逆变器、风电场的变流器、充电桩的智能电表等设备通常采用Modbus TCP协议进行数据采集,而电网调度…...
Perplexity案例法检索深度解析(工业级RAG系统落地避坑手册)
更多请点击: https://intelliparadigm.com 第一章:Perplexity案例法检索深度解析(工业级RAG系统落地避坑手册) Perplexity作为衡量语言模型预测不确定性的核心指标,在RAG系统中并非仅用于后处理重排序,而是…...
【安全基线】测试数据脱敏规范:喂给大模型的数据,如何确保不泄露公司机密?
一、开篇:当“喂数据”变成“泄机密” 2026年4月,一条消息震动了整个AI行业:为OpenAI、Anthropic和Meta提供训练数据的明星初创公司Mercor确认发生安全事件,黑客组织TeamPCP通过污染开源项目LiteLLM的CI/CD流水线,发布了恶意版本1.82.7和1.82.8到PyPI仓库,Mercor正是数千…...
【2026 Q1实测数据】ChatGPT新增“因果推理引擎”准确率提升至89.7%,但83%用户因忽略这4个参数设置导致失效
更多请点击: https://codechina.net 第一章:ChatGPT“因果推理引擎”的架构演进与2026 Q1实测基准 OpenAI于2025年Q4正式将ChatGPT核心推理模块重构为“因果推理引擎”(Causal Reasoning Engine, CRE),其本质是将传统…...
Python机器学习实战路线图:从EDA到模型部署的工业级路径
1. 这不是“速成课”,而是一份我带过37个转行学员后重写的Python机器学习实战路线图 你点开这篇,大概率正站在两个路口之间:一边是刷了三个月Kaggle入门赛却卡在特征工程上动弹不得,另一边是翻烂了《统计学习方法》却连一个能跑通…...
Unity 2D开发核心原理:坐标系统、物理引擎与资源契约
1. 为什么“Unity 2D 游戏开发教程(二)”不是续集,而是分水岭 很多人点开这个标题,下意识以为是“上一讲的延续”,就像看剧追更一样等着主角升级打怪。但实际在Unity 2D开发的真实工作流里,“第二讲”从来不…...
Linux字符设备驱动开发:从内核注册到/dev节点创建的完整实践
1. 项目概述:从零到一,理解Linux内核的“门牌号”管理在Linux的世界里,一切皆文件。这个哲学理念不仅体现在我们熟悉的普通文件上,更深刻地内嵌于设备管理中。当你敲下ls -l /dev命令,看到那些tty、null、random等文件…...
ANI-RSS界面美化终极指南:5个技巧打造专属追番体验
ANI-RSS界面美化终极指南:5个技巧打造专属追番体验 【免费下载链接】ani-rss 基于RSS自动追番、订阅、下载、刮削、洗版 项目地址: https://gitcode.com/gh_mirrors/an/ani-rss 你是否厌倦了千篇一律的软件界面?想要让你的追番工具拥有独一无二的…...
夏天来了TEMU爆单指南:我用凌风工具箱“标签模板“搞定夏季爆款
嘿,我是小彭,一个在跨境电商圈摸爬滚打的老玩家🙋♂️。这周在朋友圈晒出单周GMV破300万的成绩单,评论区直接炸了:"你这波操作可以啊""啥时候开个课教教我们"。说实话,真没什么高深技巧…...
从Halcon助手到你的程序:手把手教你将HSmartWindow中的ROI区域‘抠’出来并用起来
从Halcon助手到C#程序:ROI区域的高效迁移与应用实战 在工业视觉开发中,ROI(Region of Interest)的交互式调整是核心痛点之一。许多开发者习惯在Halcon助手中反复调试ROI参数,却苦于无法将这些精心调整的区域无缝迁移到…...
