UEFI之DXE阶段

news2024/9/29 17:33:17

一、DXE阶段介绍

DXE(Driver Execution Environment)阶段执行大部分系统初始化工作,进入此阶段时,内存已经可以被完全使用,因而此阶段可以进行大量的复杂工作。
DXE可以分为以下两部分:

  1. DXE内核:负责DXE基础服务和执行流程
  2. DXE派遣器:负责调度执行DXE驱动,初始化系统设备。

二、DXE阶段主函数流程

DXE阶段的源码位于MdeModulePkg/Core/Dxe/DxeMain/目录中。从DxeMain.inf文件中我们可以找到该阶段使用所有源码、依赖库、protocols和PCD的列表。
DXE Core的主函数DxeMain()执行过程如下:

  • 把HOB列表的指针转换为union格式,便于使用。
  • 初始化内存服务。
  • 根据EFI System Table和EFI Runtime Service Table这两张表中的内容初始化EFI相关服务。
  • AMI代码在此处对AmiLib进行了初始化,从而保证能够运行AmiDxeLib模块中的函数。
  • 根据HOB列表的内容对其他系统服务进行初cmd始化,如映像服务,事件服务等。
  • 获取所有的protocol,注册其GUID。protocol是一种特殊的结构体,用于驱动之间的通信。
  • 初始化DXE Dispatcher并启动。
  • 当一个FV的protocol被安装时,该FV中的每个驱动程序都会被添加到mDiscoveredList。如果FV中存在Apriori文件,则其中包含的驱动程序会被引导到mScheduledQueue。
  • DXE Dispatcher从mScheduledQueue中依次加载驱动程序并启动它。在mScheduledQueue被清空后,检查mDiscoveredList,查看是否有任何项的依赖项已完整,并将这些项添加到mScheduledQueue。
  • 当mScheduledQueue中没有更多驱动需要加载时,此函数就会自动退出。
  • 显示所有加载失败的驱动的信息。
  • 在切换到BDS阶段之前报告状态码。
  • 通过EFI_BDS_ARCH_PROTOCOL找到BDS阶段的入口函数,运行如下代码来切换到BDS阶段。
    gBds->Entry (gBds);

DXE执行流程:
dxe

DXE驱动之间通过Protocol通信,Protocol是一种特殊的结构体,每个Protocol对应一个GUID。当所有的Driver都执行完毕后,系统完成初始化,DXE通过EFI_BDS_ARCH_PROTOCOL找到BDS并调用BDS的入口函数,从而进入BDS阶段。从本质上讲,BDS是一种特殊的DXE阶段的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring源码解析——AOP的使用及AOP自定义标签

正文 我们知道在面向对象OOP编程存在一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了…

TensorFlow入门(十七、神经元的拟合原理)

深度学习的概念源于人工神经网络的研究,神经网络是由多个神经元组成,。一个神经元由以下几个关键知识点组成: ①激活函数 ②损失函数 ③梯度下降 单个神经元的网络模型如图所示 用计算公式表达如下: z为输出的结果,x为输入,w为权重,b为偏置值。z…

还在为没机器练手搭集群而苦恼?快进来免费领机器了!

前几天,在我们的技术交流群里看到有小伙伴问:有没有练手搭建Redis集群的方式推荐: 这里不禁让我想到,对于各种集群和分布式基础设施的搭建,其实是每个开发者进阶时候都要经历的一个成长过程。但是,这里对于…

数据结构与算法—时间复杂度和空间复杂度

目录 1. 什么是数据结构? 2.什么是算法? 3、算法的复杂度 4、时间复杂度 (1) 时间复杂度的概念: (2) 大O的渐进表示法: 六个例题: (3) 时间复杂度对比: 两个例题: OJ题分析时间复杂度…

一次HTTP请求流量分析详解(很详细一看就懂)

为什么要研究一个请求需要多少流量? 某天,办公室WIFI挂了,然后就开启热点用了一天,手机流量直接耗光50多个G。 后来排查发现有个任务每分钟成百上千个请求,所以才开始想到研究一下每个请求到底消耗了多少流量。以便在今…

orangepi 香橙派-实时时钟模块使用DS1307/DS3231/PCF8563

香橙派断电后,不带电池,所以时间也没法保持,需要增加模块进行时间处理 支持三种模块 DS1307/DS3231/PCF8563 在某宝上面可以买到 例子 I2cConnectionSettings settings new I2cConnectionSettings(1, Ds1307.DefaultI2cAddress); I2cDevi…

Java每日笔试题错题分析(2)

Java每日笔试题错题分析(2) 一、错题知识点前瞻第31题第24题第29题第10题 二、错题展示及其解析第31题第24题第29题第10题 一、错题知识点前瞻 第31题 三目运算符类型转换 在三目运算符java开发的环境下可以简单理解为双目运算符的类型转换问题&#xf…

基于YOLOv5、YOLOv8的烟雾报警检测(超实用项目)

目录 1.简介 2.YOLO算法 3.基于YOLOv5、YOLOv8的烟雾检测报警系统 3.1gui界面主代码 3.2YOLOv5主代码 视频已上传b站 YOLOv5、YOLOv8检测-烟雾检测报警系统_哔哩哔哩_bilibili 本文为系列专栏,包括各种YOLO检测算法项目、追踪算法项目、双目视觉、深度结构…

idea提示:无法下载源代码,找不到此对象的源代码

最近在入门消息队列,在项目里新引入了一个RabbitMQ的依赖,新建完Channel对象之后,调用该对象的方法queueDeclare想创建队列,结果发现方法里的参数都没有提示。遂点进去看,卧槽,源码下载不下来,这…

系统打印服务已关闭,竟然是它的问题!

故障现象: 一台电脑不能打印文件,一点打印就弹出对话框提示打印服务已关闭。手动开启打印服务后,大约不到1分钟打印服务又自动关闭了。 故障检修: 电脑重新启动后再次重启打印服务,打印服务依然还是会自动关闭。估计是…

【C刷题】day4

一、选择题 1、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是( ) A: n0;while(chgetchar()!\n)n; B: n0;while(getchar()!\n)n; C: for(n0;getchar()!\n…

加密市场波动:地缘政治与美股走弱引发不确定性!

伴随着国庆假期的结束,多日波动率维持低位的加密市场也似乎开始苏醒。近期多次突破28000美元未果的比特币,于9日15:00开始从27800美元附近下跌,最低跌至27260美元,同期以太坊也至1550美元左右,创近半个月来新低。 Coin…

JVM 虚拟机面试知识脑图 初高级

导图下载地址 https://mm.edrawsoft.cn/mobile-share/index.html?uuid3f88d904374599-src&share_type1 类加载器 双亲委派模型 当一个类收到类加载请求,它首先把类加载请求交给父类(如果还有父类,继续往上递交请求).如果父类无法加载该类,再交给子类加载 防止内存中出现…

[LeetCode]链式二叉树相关题目(c语言实现)

文章目录 LeetCode965. 单值二叉树LeetCode100. 相同的树LeetCode101. 对称二叉树LeetCode144. 二叉树的前序遍历LeetCode94. 二叉树的中序遍历LeetCode145. 二叉树的后序遍历LeetCode572. 另一棵树的子树 LeetCode965. 单值二叉树 题目 Oj链接 思路 一棵树的所有值都是一个…

mysql面试题33:Blob和text有什么区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Blob和text有什么区别 Blob和text是数据库中存储大文本数据的两种数据类型&#…

都2023年了,你必须知道的几款主流性能测试工具!

市面上流行的压力/负载/性能测试工具多是来自国外,近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同,其功能也有很大差异,下面就为您简单介绍10款目前最常见的测试产品。 1、kylinTOP测试与监控平台(商…

Transformer为什么如此有效 | 通用建模能力,并行

目录 1 更强更通用的建模能力 2 并行计算 3 大规模训练数据 4 多训练技巧的集成 Transformer是一种基于自注意力机制的网络,在最近一两年年可谓是大放异彩,我23年入坑CV的时候,我看到的CV工作似乎还没有一个不用到Transformer里的一些组…

毕业设计项目选题Java高考志愿咨询平台 高考志愿填报助手系统源码+调试+开题+lw

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

Netty 介绍

1 Netty 原理 Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制&…

jQuery 模版

一、安装 <script type"text/javascript" src"http://ajax.microsoft.com/ajax/jquery /jquery-1.4.min.js"></script> 二、元素隐藏/显示 &#xff0c;jQuery toggle() 通过 jQuery&#xff0c;可以使用 toggle() 方法来切换 hide() 和 sh…