在所有DXE驱动程序加载之后,可以在BDS阶段之前自动加载和执行EFI应用程序吗? 如果我在DXE驱动程序之后将应用程序包含在.fdf文件中,是否会自动加载并执行?
答案 0 :(得分:1)
这个问题非常重要,我只会用我的答案抓住表面。请阅读我提到的文档以获取更多信息。
如果您的硬件具有UEFI固件的完整源代码,则可以在BDS阶段之前添加要执行的UEFI模块。否则,您只能通过使用ExitBootServices
shell命令添加UEFI应用程序来影响引导顺序(在调用bcfg
之前),请检查this question。
如果你想在BDS之前执行代码,它必须是DXE模块(即DRIVER
,RUNTIME_DRIVER
)。有许多模块类型可以使用,具体取决于您的使用案例。有关模块类型的更多信息,请参阅INF file specification的附录G。
添加FDF
文件不足以执行代码。 FDF
文件仅描述flash布局:每个二进制文件在最终flash图像中的放置方式和位置。要添加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
),从而启动设备。入口点应仅用于协议注册,不建议在入口点启动设备。
有用的资源:
INF
,FDF
,DSC
,DEC
等。)