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

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

似乎EDK2仅自动“加载”某些FV ,然后分派(dispatch)其驱动程序,但我不知道如何在EDK2中识别这些特定的FV。

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

任何指针将不胜感激。

最佳答案

我在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);

09-18 20:58