如何让基于UEFI EDK2的BIOS自动加载位于其自身固件卷中的驱动程序



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

在我将驱动程序从主FV中移出之前,我会在POST期间看到遗留的OROM登录。然而,由于我已经将驱动程序移到了新的FV,我再也看不到遗留的OROM登录了。看来遗留的OROM已不再加载。

EDK2似乎只"自动"加载某些FV,然后调度它们的驱动器,但我不知道这些特定的FV是如何在EDK2中识别的。

我已经搜索了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);

相关内容

最新更新