惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Schneier on Security
I
InfoQ
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
O
OpenAI News
W
WeLiveSecurity
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
Cloudbric
Cloudbric
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
NISL@THU
NISL@THU
T
Tailwind CSS Blog
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
D
DataBreaches.Net
B
Blog RSS Feed
N
News and Events Feed by Topic
N
News and Events Feed by Topic
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
腾讯CDC
Latest news
Latest news
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
V
V2EX
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
Help Net Security
Help Net Security

博客园 - yooooooo

ftraceoption irq-info MPAM BE/ FE 的区别及功能 IPI与CPU唤醒机制 【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】 PCIe 总线的 ASPM 和 链路状态机制总结 fw_devlink 功能 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 Android Camera性能分析 录像Buffer Path详解 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 sched feature TTWU_QUEUE 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 EDK II PCD的概念、类型、使用 PELT算法浅析 load_balance函数代码详解 UEFI Boot Manager Linux misfit task Linux 内核中sched_prio_to_weight转换关系 CFS任务放置代码详解 CFS任务的负载均衡(load balance)
UEFI:FDF文件及FD、FV、FFS
yooooooo · 2025-11-23 · via 博客园 - yooooooo

一、基本概念

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中)