DXE-------Driver Execution Environment (执行驱动环境)详解

概述

DXE是在PEI阶段之后的下一个阶段。它实现了驱动环境的搭建(UEFI第三阶段)。

        DXE阶段执行了大量的系统初始化工作,在PEI的基础上,进入此阶段时,内存已经可以被完全使用,因此此阶段可以进行大量复杂的工作。DXE驱动之间通过Protocol通信。当所有的Driver都执行完毕后,系统完成初始化,接着会执行一个特殊的DXE Driver 的Protocol进而进入BDS阶段。从本质上讲,BDS是一种特殊的DXE阶段的应用程序。 

 

整体流程

  1. DxeMain是DXE阶段执行的主函数,入口函数。根据以参数形式接受PEI阶段生成的HOB表,初始化系统服务。
    VOID
    EFIAPI
    DxeMain (
      IN  VOID *HobStart
      )
  2. 首先初始化内存服务,创建EFI System Table,在随后被执行的DXE Driver中逐步完善此table。
      //
      // Initialize Memory Services
      //
      CoreInitializeMemoryServices (&HobStart, &MemoryBaseAddress, &MemoryLength);
    
      MemoryProfileInit (HobStart);
  3. 生成Boot Services / Run Time Services / DXE Services.
  4. 调用DXE Dispatcher,所有的DXE Driver在这个函数中被检测并执行。
      //
      // Invoke the DXE Dispatcher
      //
      //*** AMI PORTING BEGIN ***//
      // Process DxeCoreInitialize eLink
      ProcessDxeCoreInitializeHooks(gDxeCoreImageHandle, gDxeCoreST);
  5. 当所有的DXE Driver被执行完成之后,DXE通过EFI_BDS_ARCH_PROTOCOL找到BDS并调用BDS的入口函数,从而进入BDS阶段。

      //
      // Transfer control to the BDS Architectural Protocol
      //
      gBds->Entry (gBds);

    可见下图,理解整个DXE流程:

 

涉及单元及功能

  1. DXE Core:DXE的核心,负责DXE基础服务和执行流程。负责调度DXE Driver和生成EFI system table,提供Boot Service,Runtime Service ,DXE Service。
  2. DXE Driver:负责各种硬件的初始化,产生protocol和其他service。DXE驱动有两种类型,一种是符合UEFI驱动模型的,另一种就是不符合的普通DXE Driver。
    1. Non-Driver Model:       
      1. 分步骤初始化CPU&chipset。
      2. 生成Architectural protocol供DXE Core或其他的DXE Driver使用。
      3. 在DXE早期阶段执行。
    2.  符合标准的UEFI驱动模型:
      1. 执行此模组时不会对硬件进行初始化操作。
      2. 注册Driver binding protocol到handle database。
      3. 注册的protocol在BDS阶段被调用并对硬件进行操作。
  3. DXE dispatcher:DXE core 的一部分,以正确的顺序来搜寻和执行DXE driver,负责调度执行DXE驱动,初始化系统设备。
  4. DXE Architectural protocol:由DXE driver所产生,是DXE core和hardware沟通的唯一介质,这些Protocol在UEFI BIOS运行的过程中会安装,且一定需要被安装,如果没有被安装的话,系统就会报错。包括:gBds,gCpu,gSecurity,....

 
DXE阶段主要使用的几类HOB数据 

  1. 可用内存资源信息:类型为EFI_HOB_TYPE_RESOURCE_DESCRIPTOR,用于初始化内存申请与回收服务,提供申请和回收内存的方法。
  2. DXE模块数据:类型为EFI_HOB_MEMORY_ALLOCATION,子类型Name=gEfiHobMemoryAllocModuleGuid,用于初始化镜像服务,提供加载、解析和执行文件的方法。
  3. 闪存卷信息:FlashVolume,类型为EFI_HOB_TYPE_FV,对每个闪存卷建立一个PROTOCOL用于读取数据。所有的驱动数据从这里面读取,然后调度执行。

 

DXE阶段的功能

  1. 执行系统大部分的初始化工作 。
  2. 提供系统表、启动服务以及Run Time Services。
  3. 初始化系统设备,生成Protocol和Handle。
  4. 执行BDS的入口应用程序,从而进入BDS阶段。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值