bt365最新网站-bte365娱乐线-bt365官方网站

EFI基本概念之FV

1 基本概念及用法 FD:固件设备,指任何可以存储固件的设备或设备的集合,它存储代码和数据。 FV:固件卷,指在FD上一个连续的部分,我们可

EFI基本概念之FV

1 基本概念及用法

FD:固件设备,指任何可以存储固件的设备或设备的集合,它存储代码和数据。

FV:固件卷,指在FD上一个连续的部分,我们可以把它看成一个逻辑设备,因为我们代码真正操作的是FV,而非FD。我们经常提到的FFS的概念也是以FV的形式存在,它描述了FV中的文件组织方式。FV之于FD,类似于thread之于package。

FF:固件文件,指在FV中组织代码和数据的一个集合。我们在PEI和DXE阶段都要Dispatch Modules,这个Modules指的就是FF。

1.1 如何找FF

要想找到FF,首先要找到FV,然后在FV中搜索是否有这个FF存在。我们来看一下DxeLoad中,如何找到Dxe Core的入口函数。

路径:mdemodulepkg\core\dxeiplpeim\dxeload.c(udk2014)

EFI_PEI_FILE_HANDLE

DxeIplFindDxeCore (

VOID

)

{

EFI_STATUS Status;

UINTN Instance;

EFI_PEI_FV_HANDLE VolumeHandle;

EFI_PEI_FILE_HANDLE FileHandle;

Instance = 0;

while (TRUE) {

Status =PeiServicesFfsFindNextVolume (Instance, &VolumeHandle);

if (EFI_ERROR(Status)) {

REPORT_STATUS_CODE (EFI_PROGRESS_CODE, (EFI_SOFTWARE_PEI_MODULE |EFI_SW_PEI_CORE_EC_DXE_CORRUPT));

}

ASSERT_EFI_ERROR (Status);

FileHandle =NULL;

Status =PeiServicesFfsFindNextFile (EFI_FV_FILETYPE_DXE_CORE, VolumeHandle,&FileHandle);

if (!EFI_ERROR(Status)) {

returnFileHandle;

}

Instance++;

}

}

PeiServicesFfsFindNextVolume(Instance,&VolumeHandle)是在检索系统中的FV,利用Instance参数。如果返回ERROR状态,那么说明FV已经全部被检索完毕。如果成功找到Instance的FV,就会返回FV的Handle VolumeHandle。接着就可以通过PeiServicesFfsFindNextFile(EFI_FV_FILETYPE_DXE_CORE,VolumeHandle,

&FileHandle)函数,找到该FV中file type为EFI_FV_FILETYPE_DXE_CORE的FF,返回其FileHandle。

当然这个FF属于DXE Core,比较特殊,具有唯一性。如果是一般的Module,最好用FfsFindFileByName函数,利用FF的Name,即GUID来找到其FileHandle。

1.2 相关函数介绍

1.2.1

FfsFindNextVolume

查找FV

typedef

EFI_STATUS

(EFIAPI *EFI_PEI_FFS_FIND_NEXT_VOLUME2) (

IN CONST EFI_PEI_SERVICES **PeiServices,

IN UINTN Instance,

IN OUTEFI_PEI_FV_HANDLE *VolumeHandle

);

PeiServices : EFI_PEI_SERVICES表的指针

Instance : 要查找的FV实例。一般说来,该值为0时,FV指BFV,PEI Core就存在于BFV中。

VolumeHandle :如果FV存在,该参数为该FV的FvHandle。

1.2.2 FfsFindNextFile

在FV中查找FF

typedef

EFI_STATUS

(EFIAPI *EFI_PEI_FFS_FIND_NEXT_FILE2) (

IN CONST EFI_PEI_SERVICES **PeiServices,

INEFI_FV_FILETYPE SearchType,

IN CONSTEFI_PEI_FV_HANDLE FvHandle,

IN OUTEFI_PEI_FILE_HANDLE *FileHandle

);

PeiServices : 指向EFI_PEI_SERVICES表的指针

SearchType : 文件类型,利用该参数,可以找出这个类型的FF。

FvHandle : FV的Handle,通过FfsFindNextVolume获取。

FileHandle : 要查找的FF的Handle。

1.2.3 FfsFindFileByName

在FV中查找FF

typedef

EFI_STATUS

(EFIAPI *EFI_PEI_FFS_FIND_BY_NAME)(

IN CONST EFI_GUID *FileName,

IN EFI_PEI_FV_HANDLE VolumeHandle,

OUTEFI_PEI_FILE_HANDLE *FileHandle

);

FileName : 指向GUID的指针,该GUID为文件名。

VolumeHandle : FV的Handle,通过FfsFindNextVolume获取。

FileHandle : 要查找的FF的Handle。

2 FV综述

2.1 FDF描述文件

在EDKII中,FDF描述了整个FD,以及各个FV。我们想要了解FD中都有哪些FV时,只要查看FDF文件即可。

在[FD]条目中,有FD们region layout列表,它的格式为:

Offset | Size

[PcdOffCName |PcdSizeCName]

[RegionType]

RegionType为FV的,就是我们想要找的Firmware Volume,编译过后,会在编译目录的FV目录中生成N个.FV文件。

2.2 生产者GenFds

FDF描述文件写完后,谁来使用呢?我在UDK BaseTools一章中,有贴一张图。GenFds –f XXX.fdf。也就是说GenFds负责解析FDF文件,并生成最终的FD。

2.3 FfsFindNextVolume的资源从何处来

在PEI阶段,代码直接使用FfsFindNextVolume获取FVHandle。而它使用什么资源,延长处理这些资源,而后返回FvHandle呢?答案是:Hob,代码在建立HOB时,会建立EFI_HOB_TYPE_FV类型的HOB,这些HOB的BaseAddress和Length来源于Pcd,也是在Fdf文件中最终赋的值。

(完!没有写DXE协议处理FV的部分,其实原理也差不多。新年第一篇,祝愿所有的老年人健康平安!)

← 上一篇: 全面指南:天行VPN的使用与安装教程
下一篇: 富宝袋排队放款要多久?这里告诉你 →

相关推荐

网课学习机

网课学习机

简体中文Englishلغة العربيةРусский希沃教学大模型产品系列教学硬件教学应用管理平台AI全面屏交互智能平板智慧黑板交互智能录播智能

梦呓看什么科?

梦呓看什么科?

梦呓是一种什么病? 指在睡梦中发出的除鼾声以外的某种语言,通常清醒后本人不能回忆。属于非正常觉醒的一种现象,多数情况下属于生理性

2002世界杯阿根廷队的参赛大名单,这纸面实力拉满了吧?也难怪赛前是夺冠最大热门之一,热度比巴西队高了两档了吧

2002世界杯阿根廷队的参赛大名单,这纸面实力拉满了吧?也难怪赛前是夺冠最大热门之一,热度比巴西队高了两档了吧

齿留香2024-08-30 17:10:51发布于江苏点灭只看此人举报这届最大问题就是第二场遇到了英格兰摆铁桶阵 ,阿根廷预算赛一路踢得水银泻地的流畅遇

为什么apple watch的QQ收不到消息

为什么apple watch的QQ收不到消息

您的watch是蜂窝款,还是GPS款? 如果是GPS的: 检查Apple Watch 和iPhone的连接是否正常? 尝试重启iPhone和watch. 用watch的控制中心中的呼叫iPhone,看iPhone是否

预告:游戏将更新1.29.1.0,盒子更新前须知

预告:游戏将更新1.29.1.0,盒子更新前须知

本周3坦克世界更新1.29.1.0版本,本次为中版本号更新,更新会改动客户端。一些插件需要等翻新后再上线。 国服游戏维护好,盒子尚未更新该怎

编程专业推荐的大学:w3cschool带你一览

编程专业推荐的大学:w3cschool带你一览

中国的编程专业在近年来越来越受到重视,许多大学纷纷开设了相关专业。如果你想要在编程领域获得优秀的教育和职业前景,以下是一些你不