2014-10-08 65 views
2

我正在使用UEFI EDK2创建BIOS。我修改了FDF以将驱动程序(包括UEFI和旧版本)从主固件卷中移动到我严格创建的独立固件卷(FV)中以容纳驱动程序。如何让我的基于UEFI EDK2的BIOS自动加载位于其固件卷中的驱动程序?

在我将驱动程序从主FV中移出之前,我会在POST期间看到传统的OROM登录。但是,由于我已将驱动程序移至新的FV,因此我不再看到传统的OROM登录。看起来传统的OROM不再被加载。

看来,EDK2“自动”加载只有一定的Fv,然后分派他们的司机,但我无法弄清楚这些特定的Fv如何在EDK2鉴定。

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

任何指针将不胜感激。

+0

是http:// sourceforge上.net/p/edk2/mailman/message/32913290 /同样的问题,如果是的话,安德鲁的答案能解决你的问题吗?如果是这样,你可以在这里添加自己的答案供将来参考? – unixsmurf 2014-10-11 17:47:47

回答

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); 
相关问题