UEFI.源码分析.DXE阶段的执行

DXE-------Driver Execution Environment (执行驱动环境)详解 DXE是在PEI阶段之后的下一个阶段。它实现了驱动环境的搭建(UEFI第三阶段)。DXE阶段执行了大量的系统初始化工作,在PEI的基础上,进入此阶段时,内存已经可以被完全使用,因此此阶段可以进行大量复杂的工作。DXE驱动之间通过Protocol通信。当所有的Driver都执行完毕后,系统完成初始化,接着会执行一个特殊的DXE Driver 的Protocol进而进入BDS阶段。从本质上讲,BDS是一种特殊的DXE阶段的应用程序。整体流程DxeMain是DXE阶段执行的主函数,入口函数。 阅读详情
  • 源码EDK2 : Tianocore
  • UEFI源码分析系列第一篇,DXE阶段的初始化与执行流程

源码结构

  • MdeModulePkg/
    • Core/
      • Dxe/
        • Dispatcher/ DXE调度器
        • DxeMain/ DXE阶段入口函数
        • Event/ 异步事件机制
        • FwVol/ 闪存文件系统FFS
        • FwVolBlock/ 闪存的块操作
        • Gcd/ 全局配置数据库
        • Hand/ 句柄Handle
        • Image/ 镜像文件服务,加载、解析和执行
        • Library/ 库函数,三个与lock相关的操作
        • Mem/ 内存服务,申请和释放
        • Misc/ 其他内容,看门狗、
        • SectionExtrantion/
        • DxeCore.uni 字符串数据
        • DxeCoreExtra.uni 字符串数据
        • DxeMain.h 头文件
        • DxeMain.inf 模块信息文件

DXE启动阶段


/* Dxe/DxeMain/DxeMain.c */
237 VOID                   
238 EFIAPI                 
239 DxeMain (              
240   IN  VOID *HobStart   
241   )                    
242 {

563 }  

DXE入口函数接收PEI阶段构建的HOB数据,HOB数据格式的定义位于/MdePkg/Include/Pi/PiHob.h

PEI阶段通过构建HOB数据,把系统相关的信息传递给DXE阶段,包括但不限于:PEI阶段的内存申请记录、闪存卷(FV)信息、可用内存资源信息、DXE模块数据。

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

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

269   //                                                                          
270   // Initialize Memory Services                                               
271   //                                                                          
272   CoreInitializeMemoryServices (&HobStart, &MemoryBaseAddress, &MemoryLength);

初始化内存服务


276   //                                                                                                      
277   // Allocate the EFI System Table 
UEFI.源码分析.DXE的内存服务.第一部分.初始化 源码EDK2:Tianocore UEFI源码分析系列第二篇,DXE阶段的内存服务 第一部分,内存服务的初始化过程 DXE阶段源码目录MdeModulePkg/Core/Dxe 源码版本为UDK2017 目前最新版2018代码在/Dxe/Mem/下多了HeapGuard.c这个文件,看名称应该是用来守护堆操作防止异常的。在UDK2017中并没有这个特性,所以我们的分析按照UDK2017的代码来。... 阅读详情

相关推荐

UEFI源码解析之UEFI_DRIVER

Dxe Driver可以视作UEFI中的一个服务,在entry中通过protocol安装自己的服务,在Bds等位置通过locate protocol使用该服务,不必依赖与具体的硬件。当需要封装某个设备或总线的时候,对应于具体的物理实现,需要用到UEFI Driver的模型实现。UEFI Driver模型实现设备/总线的检测,安装,卸载,更新,启动,停止等;一个Driver可能适配多个设备,一个设备可能连接管理多个子设备等,因此UEFI Driver还可以多次安装

wangadi057612的博客 5086

UEFI.源码分析.DXE的内存服务.第二部分.函数接口

源码EDK2:Tianocore UEFI源码分析系列第二篇,DXE阶段的内存服务 第二部分,函数接口 DXE阶段源码目录MdeModulePkg/Core/Dxe 首先我们来分析上一节的遗留问题,即函数CoreAddRange 之后我们分析一下其余的接口,如申请内存、释放内存等 最后我们从一个整体的视角来看整个内存服务 初始化流程 首先我们回顾一下整个内存初始化的过程。 在D...

随便写写 2504

UEFI.源码分析.DXE的内存服务.第三部分.HeapGuard

源码EDK2:Tianocore UEFI源码分析系列第二篇,DXE阶段的内存服务 第三部分,HeapGuard DXE阶段源码目录MdeModulePkg/Core/Dxe 基于开篇日(2018/04/18:16:30)时最新的EDk2版本,commit为255101471918ed8840f2be347916b90eef0e9c08 从初始化过程入手 直到CoreAddMemo...

随便写写 1345

UEFI.源码分析.DXE的异步事件服务.第三部分.定时器与时钟中断

源代码:EDK2 版本:UDK2017 UEFI源码分析第二篇,异步事件服务 第三部分,定时器 第一部分,事件驱动 第二部分,任务优先级 设置定时器EVT_TIMER 244 EFI_STATUS 245 EFIAPI 246 CoreSetTimer ( ...

随便写写 1225

深入EDKII源码:手把手拆解Redfish DXE Driver如何与BMC的Redis数据库“对话”

本文深入解析EDKII源码中Redfish DXE Driver如何与BMC的Redis数据库通信,详细介绍了Redfish协议在UEFI固件中的实现架构、驱动初始化流程、数据转换与传输机制,以及不同物理连接方式的实现差异。通过代码示例和实战分析,帮助开发者掌握Redfish协议在服务器固件开发中的关键技术和应用实践。

weixin_29194255的博客 141

Android Qcom Display学习(五)

什么是UEFI 高通平台UEFI有关介绍 高通605平台屏调试(4):UEFI初始化流程 第一次接触到UEFI(Unified Extensible Firmware Interfacen ,统一可扩展固件接口)是实习的时候,主要是服务器的底层,当时以为只有服务器或者PC主机的Bootloader才是UEFI。当时也是撸了一本书做了初步了解,现在也忘的差不多了 UEFI从上电到关机,一共有七个阶段: SEC: PEI: DXE: BDS: TSL: RT: AL: Display Flow 高通UEFI研究

Android驱动开发 8386

从代码到硬件:手把手拆解UEFI中PCIe HostBridge与RootBridge的初始化流程(以EDKII为例)

本文深入解析了UEFI中PCIe HostBridge与RootBridge的初始化流程,以EDKII为例详细介绍了从硬件抽象到软件协议安装的完整过程。通过代码示例和关键数据结构分析,帮助开发者掌握PCIe子系统的核心概念和初始化机制,提升底层开发能力。

weixin_26875109的博客 387

UEFI之DXE阶段

DXE阶段介绍

大猫的博客 2436

FLUX.1 LoRa 微调

微调的好处:可以让你突破换脸这种输入图片的场景约束,微调好的模型可以让你真正的文生图。换脸只能根据输入的图片和视频来生成内容。

szmars的博客 3621

linux基线检查、基线加固、安全漏扫、系统漏洞、centos7、文尾部附脚本

等保三级-CentOS Linux 7合规基线检查 风险分类:系统-等保三级-CentOS Linux 7合规基线检查 检测项说明: CentOS Linux 7合规基线检查,对标中国等保2.0第三级等级保护基本要求部分检查项目,仅供参考 检查项目 : 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 加固建议: 1、执行`cat /etc/shadow | awk -F: '($2 == "" ) { print $1}' `, 查看空密码账户并处理; 2、

swindy博客 5622

FAST-LIO2实战:如何在无人机上部署并实现厘米级定位(附ROS配置全流程)

本文详细介绍了如何在无人机上部署FAST-LIO2激光雷达惯性里程计系统,以实现厘米级精确定位。内容涵盖从硬件选型(如激光雷达与机载计算机)、软件环境配置(ROS Noetic)、传感器标定,到FAST-LIO2参数调优、与PX4飞控集成以及实际飞行测试的全流程。重点解决了实时定位中的外参标定、数据同步等关键问题,为无人机在无GPS或复杂光照环境下提供稳定可靠的定位解决方案。

weixin_29062865的博客 249

EndNoteX9完整详细安装教程

EndNoteX9完整详细安装教程

rothschild666的博客 10万+

Homebrew 必备软件清单:我的 macOS 开发环境搭建全记录

本文详细介绍了如何使用Homebrew在macOS上搭建高效的开发环境,包括基础配置、核心开发工具链、高效编码工具集等30个必备工具。通过Homebrew这一macOS缺失的包管理器,开发者可以一键安装命令行工具和GUI应用,大幅提升工作效率。文章还提供了日常维护命令和疑难问题解决方案,适合从新手到资深开发者的所有用户。

weixin_28836507的博客 353

从GitHub到海浪模拟:手把手教你配置WAVEWATCHⅢ 6.07.0的完整开发与测试环境

本文详细指导如何在Ubuntu系统中配置WAVEWATCHⅢ 6.07.0的开发与测试环境,涵盖虚拟机设置、依赖安装、源码编译及案例验证的全流程。通过步骤化教程,帮助科研人员快速搭建高效的海浪模拟平台,提升海洋数值模拟的研究效率。

weixin_42568801的博客 322

漫画安全HIDS、EDR、NDR、XDR

漫画安全HIDS、EDR、NDR、XDR

墨痕诉清风的博客 3445

30天入门 SAP BTP 开发系列之二:了解 SAP BTP Region 的概念,包含账号申请的详细步骤

SAP BTP 的 Region,实际是一组按地理位置划分的、由 SAP 或合作 Hyperscaler 承载的基础设施栈。这些基础设施栈至少包含多可用区网络、对象存储、计算节点及自动化运维等服务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1460

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: PCIe是如何工作的——How PCI Express Works
下一篇: UEFI.源码分析.DXE的内存服务.第一部分.初始化
木艮氵
博客等级 码龄11年 136粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值