UEFI的运行可以分为如下几个阶段:

  • SEC阶段
    此阶段是安全验证阶段,系统上电后即进入此阶段,作为UEFI的第一阶段,它是可信系统的根,一般可以在此阶段验证后面的PEI,此阶段大部分工作是为后面的PEI阶段提供运行环境。

  • PEI阶段
    PEI(Pre-EFI-Initialization)是EFI前期初始化阶段,资源依然十分有限,内存到了PEI后期才被初始化,其主要功能是为DXE准备执行环境,准备DXE需要的信息并最终将控制权交给DXE。按照功能可以分为PEI Core Services和PEI Modules,另外还需要实现Modules之间通信的接口PPI。

  • DXE阶段
    Driver Execution Environment,此阶段是驱动运行阶段,这是一个非常重要的阶段,完成了外设初始化的大部分工作,此阶段内存已经可以完全被使用了,此阶段还会初始化前面文章所介绍的edk2中的基础服务组件,系统表,启动服务表,运行服务表。在所有driver执行完毕之后,系统会进入下一个阶段,BDS。

  • BDS阶段
    Boot Device Selection阶段,只要是启动策略的执行,它其实是一个特殊的应用程序,当用户选择了启动设备之后,此阶段就会继续运行,跳转到TSL阶段。

  • TSL阶段
    Transient System Loader阶段,也是一个应用程序运行阶段。UEFI Shell就属于此阶段的人机交互界面。但一般情况下不会进入此界面,而是直接执行OS Loader。最后会执行ExitBootServices来结束启动服务,只保留RunTime Services,进入下一个阶段,RT。

  • RT阶段
    Runtime 阶段是OS Loader阶段,系统控制权已经由UEFI内核转交给OS Loader,UEFI占用的资源都已经被回收了,所有控制权都交给了OS Loader。OS Loader负责夹在真正的操作系统OS。

  • AL阶段
    After Life阶段,当系统出现故障时进入的阶段,UEFI目前没有定义此阶段的行为。

参考:《UEFI 原理与编程》–戴正华

UEFI开发与调试---运行阶段介绍相关推荐

  1. UEFI开发与调试--edk2中的基础组件

    还记得前面介绍的MdePkg和MdeModulePkg吗?这两个包中会实现UEFI内核中的基础组件,其中就包括了系统表,启动服务表,运行时服务表. 系统表(System Table) 系统表是edk2 ...

  2. UEFI开发与调试---edk2中的应用模块/库模块/驱动模块

    应用模块 应用模块包含标准应用程序模块,shell应用程序模块,以及main应用程序模块 标准应用程序模块 它是所有其他应用程序模块的基础,作为一个模块来说,同样由源文件和工程文件(.inf)组成. ...

  3. UEFI开发与调试---edk2中的Package

    在开始编写UEFI APP之前,我们需要先对UEFI包和模块的概念有个了解. 在edk2的根目录下,我们可以发现有很多*Pkg命令的目录,这些实际上都是各个不同的包,每个包中都是一组模块的集合,每个包 ...

  4. UEFI开发与调试---edk2中的Module

    Edk2在设计是按照模块来进行的,其中模块包含有很多种类型,比如最常见的三种:应用程序模块,驱动模块,库模块.每个模块都包含了一个工程元数据文件(.inf)和源文件..inf文件是用来辅助编译的,功能 ...

  5. UEFI开发与调试---QEMU虚拟盘的创建与修改

    支持的文件格式 qemu支持多种类型的文件系统,而最原生的以及最灵活的是qcow2类型了,这种文件系统支持写时复制,加密,压缩以及VM快照. 除了这种文件系统之外,如下类型也是被支持的:raw ,cl ...

  6. 飞腾FT2000/4 u-boot/UEFI开发环境搭建

    参考 UEFI开发与调试-edk2中子目录介绍 ACP基础--Resource Descriptors for ACPI ubuntu16.04操作系统下的edk2安装 [UEFI实战]如何在OS下获 ...

  7. UEFI开发探索100 – 《UEFI编程实践》发布啦

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) <UEFI编程实践>发布 1 内容简介 第一部分 UEFI环境搭建及UEFI应用构建 ...

  8. UEFI开发探索28 – 用Windbg建立UEFI调试环境

    (请保留-> 作者: 罗冰   https://blog.csdn.net/luobing4365) 最近的翻译计划和博客计划严重滞后.一方面是因为有两个案子在推进,业余时间也被占用:另外一方面 ...

  9. STM32G431+P-NUCLEO-IHM03开发套件调试3(p-nucleo-ihm03套件)-FOC基础原理介绍

    STM32G431+P-NUCLEO-IHM03开发套件调试3(p-nucleo-ihm03套件) 文章目录 STM32G431+P-NUCLEO-IHM03开发套件调试3(p-nucleo-ihm0 ...

  10. 使用神卓互联内网穿透实现微信公众号开发:介绍了如何通过神卓互联实现微信公众号的开发和调试。

    注册微信公众平台账号,并创建一个测试号. 1.在神卓互联控制台上,将公网IP地址和本地的80端口进行映射.同时,将80端口映射到本地开发2.环境的端口(如localhost:3000). 3.在本地开 ...

最新文章

  1. 1164: 分治 逆序对
  2. esp32 python-MicroPython for esp32
  3. Java虚拟机 —— 垃圾回收机制
  4. postgresql数据库的备份与恢复
  5. Linux数据报文接收发送总结5
  6. 【MM】采购退货的处理办法
  7. Ubuntu16.04 问题汇总
  8. java 学习书籍 转载
  9. 如何看待部分985研究生不如本科生,只能去做软件测试?
  10. struts1 mysql config_详解Struts1中的struts-config.xml配置文件【一】
  11. Go语言基础练习题系列5
  12. Xshell使用教程——问答方式
  13. Linux 磁盘无损扩容
  14. 【东南大学主办: IEEE ICSIP 2022】信号与图像处理热门主题,7月邀您相约苏州
  15. 如何快速删除pdf中某一页?
  16. 2022-2027年中国安防智能化行业市场全景评估及发展战略规划报告
  17. C++多线程和并发-更新(互斥量的基本概念、使用、作用、案例)-2023/2/12
  18. 软件测试读不出硬盘,电脑经常检测不到硬盘怎么办
  19. 多目标优化蚁群算法的matlab_混合参数蚁群算法的改进优化
  20. IT小妞要好好照顾自己

热门文章

  1. Umijs组件的初次应用
  2. Nginx跨域配置及配置文件加载过程讲解
  3. linux下海康威视MVS以及库的安装
  4. 神经网络之BP算法(图说神经网络+BP算法理论推导+例子运用+代码)
  5. Android扫描局域网内所有的ip地址
  6. js调用数科阅读器_pdf.js实现在HTML下直接浏览pdf文档,无需插件即可实现
  7. 安装华为P10plus的手机驱动过程
  8. Win10 安装IE11失败错误代码0x80070490(未解决)
  9. java汉字转拼音maven_java汉字转拼音pinyin4j功能实现示例
  10. 理解拉普拉斯平滑 Laplace Smoothing