uefi – 在BDS阶段之前,EFI应用程序是否可以自动加载和执行?

在所有DXE驱动程序加载之后,可以在BDS阶段之前自动加载和执行EFI应用程序吗?

如果我在DXE驱动程序之后将应用程序包含在.fdf文件中,它是否会自动加载并执行? 最佳答案 这个问题非常重要,我只会用我的答案抓住表面.请阅读我提到的文档以获取更多信息.

如果您的硬件具有UEFI固件的完整源代码,则可以在BDS阶段之前添加要执行的UEFI模块.否则,您只能通过使用bcfg shell命令添加UEFI应用程序来影响引导顺序(在调用ExitBootServices之前),请检查this question.

如果你想在BDS之前执行代码,它必须是DXE模块(即DRIVER,RUNTIME_DRIVER).有许多模块类型可以使用,具体取决于您的使用案例.有关模块类型的更多信息,请参见附录G INF file specification.

添加到FDF文件不足以执行代码. FDF文件仅描述闪存布局:每个二进制文件在最终闪存映像中的放置方式和位置.要添加DXE驱动程序,还必须将INF文件添加到平台DSC文件.接下来就是在INF中有正确的[Depex]部分,它可以很简单:

[Depex]
  TRUE

最后你需要了解的是DXE Dispatcher.每个引导DXE Dispatcher迭代已知图像列表,并调用EFI_DRIVER_BINDING_SUPPORTED函数(由EFI_DRIVER_BINDING_PROTOCOL定义).此方法应检查平台是否支持的硬件.如果EFI_DRIVER_BINDING_SUPPORTED返回成功,则将调用其他驱动程序绑定方法(EFI_DRIVER_BINDING_START),从而启动设备.入口点应仅用于协议注册,不建议在入口点启动设备.

有用的资源:

> EDK II Specifications – 各种文件类型的规格(INF,FDF,DSC,DEC等)
> Developer Resources – 驱动程序编写者指南和驱动程序向导.
> EDK2 sourceforge – 关于EDK2的非常有用的资源库

点赞