我正在使用UEFI EDK2来创建BIOS。我修改了FDF,将驱动程序(UEFI和旧版本)从主固件卷移动到我严格创建的单独固件卷(FV)中以保存驱动程序。
在我从主FV移动驱动程序之前,我会在POST期间看到旧版OROM登录。但是,由于我已将驱动程序移至新的FV,因此我不再看到旧的OROM登录。似乎传统的OROM不再被加载。
似乎EDK2“自动”只加载 某些FV ,然后调度他们的驱动程序,但我无法弄清楚如何在EDK2中识别这些特定的FV。
我已经搜索了EDK2代码几个小时,试图找出FV HOB的创建/初始化的位置和方式,但我找不到这段代码。我猜我需要将新的FV的GUID添加到某个列表或数据结构中,但我现在正在猜测。
任何指针都会非常感激。
答案 0 :(得分:1)
我在BIOS中找到了创建固件卷HOB的位置(在专有文件中)。我在那里添加了代码,为我的新固件卷创建了一个FV HOB。
之后,我不得不安装可以处理新固件卷的PPI。这是PPI创建代码:
static EFI_PEI_FIRMWARE_VOLUME_INFO_PPI mNewFvPpiInfo = {
EFI_FIRMWARE_FILESYSTEM2_GUID,
(VOID*) <Starting address of new FV in the ROM>,
<size of the new FV in the ROM>,
NULL,
NULL
};
static EFI_PEI_PPI_DESCTRIPTOR mNewFvPpi = {
(EFI_PEI_PPI_DESCTRIPTOR_PPI | EFI_PEI_PPI_DESCTRIPTOR_TERMINATE_LIST),
&gEfiPeiFirmwareVolumeInfoPpiGuid,
&mNewFvPpiInfo
};
以下是安装PPI的代码(放置在新的FV HOB添加到FV HOB列表之后):
(*ppPeiServices)->InstallPpi(ppPeiServices, &mNewPvPpi);