4

我正在使用 UEFI EDK2 创建 BIOS。我修改了 FDF,将驱动程序(UEFI 和旧版本)从主固件卷移动到我创建的单独的固件卷 (FV) 中,以严格保存驱动程序。

在我从主 FV 移动驱动程序之前,我会在 POST 期间看到旧版 OROM 登录。但是,由于我已将驱动程序移至新的 FV,因此我不再看到旧版 OROM 登录。似乎不再加载旧版 OROM。

EDK2 似乎“自动”仅加载某些 FV,然后调度它们的驱动程序,但我无法弄清楚这些特定的 FV 在 EDK2 中是如何识别的。

我已经搜索了 EDK2 代码几个小时,试图找出 FV HOB 的创建/初始化位置/方式,但我找不到此代码。我猜我需要将新 FV 的 GUID 添加到某个列表或数据结构中,但我现在真的猜到了。

任何指针将不胜感激。

4

1 回答 1

2

我在 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);
于 2014-10-16T19:49:38.627 回答