UEFI学习笔记(三):FDF文件及FD、FV、FFS

UEFI学习笔记(三):FDF文件及FD、FV、FFS

一、基本概念

1.FDF文件:

Flash Description File (固件描述文件)定义了固件的布局、包含的模块和其他与映像生成相关的内容。

作用:

.fdf 文件用于指定固件映像的布局,包括:固件区域的定义、模块和驱动程序的链接位置、固件的启动设置。GenFds 工具用于将 FDF 文件转换为 FD 文件。

2.FD:

FD (Firmware Descriptor)文件通常包含多个固件区域,如启动区、驱动程序区、应用程序区等。一个FD由一组FV组成,它将这些固件卷组合成一个完整的固件映像,准备被烧录或加载到设备上。

作用:

FD 文件用于将多个固件组件打包成一个单一的固件映像。它定义了固件映像中各个部分的位置和大小。

生成:

在 UEFI 固件构建过程中,FD 文件是通过工具(如 GenFds)从 FDF 文件生成的。它表示固件的最终映像格式,包含所有需要的固件模块和区域。

3.FV

FV (Firmware Volume)是固件卷,它是固件映像中的一个逻辑区域,用于组织和存储固件组件。每个 FV 文件包含一个或多个 FFS 文件 ,构成固件映像中的不同区域(如启动区域、驱动区域)。在 .fdf 文件中,FV 是一个逻辑区块,实际存储多个固件文件。

作用:

FV 提供了一个结构化的方式来组织固件组件,使得不同的固件模块可以按需加载和管理。FV 通常用于 UEFI 固件映像的打包和管理。FV通过GUID(全局唯一标识符)来标识和访问其中的模块

生成:

在固件构建过程中,FV 文件通过将多个 FFS 文件组合在一起生成,形成固件卷。

4.FFS

FFS (Firmware File System)是固件文件系统中的一个单独的文件,它可以是一个模块、驱动程序、库、或应用程序(如 .efi 文件)。FFS 文件是固件卷(FV)中的基本组成部分。

作用:

FFS 文件用于存储和组织固件中的不同模块和驱动程序。每个 FFS 文件都有一个头部,描述其类型、大小和其他属性。

生成:

FFS 文件在固件构建过程中由编译器和链接器生成,然后被打包到 FV 文件中。

4.Capsule

它是用于定义固件更新包的配置部分。Capsule 是一种特定格式的固件更新映像,通常由多个组件打包而成,供系统在运行时或重启时进行更新。Capsule 的定义涉及到如何将固件更新数据组织到一个整体的映像中,以便通过 UEFI 更新机制进行处理。

Capsule 在 .fdf 文件中的作用:

Capsule 在 .fdf 文件中用于描述固件更新映像的布局、内容以及如何将这些内容打包成 Capsule 文件。

二、关联

FD、FV 、FFS和section:

FD、FV 、FFS、section之间存在密切的层级关系 ,从大到小依次构成整个固件。

FD是FV的上层容器,FV是FD中存储固件组件的一种结构。在 UEFI 固件的构建过程中,这些文件格式协同工作,以确保固件映像的正确组织和打包。GenFds 工具用于将 FDF 文件转换为 FD 文件,FD 文件再包含多个 FV 和 FFS 文件,FFS由section组成,以生成最终的固件映像。

FDF和INF:

在 .fdf 文件中,FV 会引用通过 INF 文件定义的模块 ,将它们打包到固件卷中。通常,.fdf 文件会指向多个由 INF 文件生成的模块,并将它们组织到一个或多个 FV 中。
(!!!新增app或driver的时候,需要把.inf添加到fdf中)

参考文章:

UEFI中的edk2编译流程_edk2代码走读

【UEFI基础】FDF文件

相关推荐
摇滚侠19 小时前
《RocketMQ 官网》阅读笔记 RocketMQ 消息队列 MessageQueue 消息 Messagege
笔记·rocketmq
Ztt66666666620 小时前
【无标题】
经验分享·笔记·其他·百度·微信公众平台
依然范特东20 小时前
强化学习笔记4--TD算法
笔记
AOwhisky21 小时前
Linux(CentOS)系统管理入门笔记(第十五期)——文件系统与存储管理(上篇):设备识别、挂载与文件查找
linux·运维·笔记·centos·文件系统
茯苓gao1 天前
嵌入式开发笔记:QSerialPort 完整使用指南——从基础 API 到工程实战
笔记·嵌入式硬件·qt·学习
一起努力啊~1 天前
DataWhale组队学习笔记--llm-algo-leetcode(七)
笔记·学习·llm
ajassi20001 天前
AI语音智能体开发日记(一)如何为“小智”服务器启用并调试 License 功能
笔记·ai·嵌入式·ai编程
疯狂打码的少年1 天前
【面向对象】面向对象概述:从“按步骤做”到“找谁来做”
笔记
今夜有雨.1 天前
C++JSON 解析器
c++·笔记·后端·学习·json
xian_wwq1 天前
【学习笔记】框架层坍缩——LangChain 们正在被重新定义-14/15
笔记·学习·langchain