UEFI启动的七阶段笔记

news2024/9/25 17:20:31

研究起点是CPU收到ResetVector信号后,开始执行第一行代码,一直到计算机关机/重启/崩溃,被划分为七个不同阶段。

在这里插入图片描述
在这里插入图片描述

1. SEC安全阶段

最早开始运行的固件代码,很大部分是汇编语言开发的。
主要负责四件事:

  • 处理平台所有的重启事件
    给CPU发送ResetVector信号,也就是重置,与关机再开机不同。
  • 创建一个临时内存区
    初始化了CPU,没有初始化内存,但又有需求。SEC阶段的C代码需要堆栈,这就要求必须有内存,在物理内存没有初始化的情况下会临时使用缓存。内建在CPU中初始化好的,可以暂时为C代码服务。
  • 作为整个安全执行的根、
    SEC是整个系统执行的起点,可能会遇到各种异常,就需要设置IDT,有了中断描述符表接受异常,就能让系统遭遇意外情况时不至于崩溃
  • 为下一阶段PEI传递交换信息
    为PEI阶段的代码设置临时内存的基地址和长度,并传给PEI。还要找到PEI代码的入口点,将控制权移交过去,并且处理临时内存

2. PEI阶段

早期的EFI初始化,处于启动流程很早期的阶段,只能利用处理器的片上资源。

  • 初始化永久内存
    调用SEC提供的接口处理作为临时内存的缓存保障安全
  • Hand-Off-Blocks
    把初始化好的永久内存通过hand-off blocks形式进行描述。HOB是一种用于交换的块,负责阶段间的数据传递。PEI会收集很多下一阶段DXE所需的数据,这些数据就打包为HOB,然后用一个头来对内存中的HOB进行标识,头和HOB组成HOB List。
  • 固件卷所处的位置也会被PEI使用HOB描述。
  • 控制权交给DXE
    PEI代码分为两部分:PEI Foundation和PEIMs,就是基础和模块。Foundation负责接受SEC发送的交换数据,并扮演模块分发的角色。PEIMs是模块化的PEI功能有其实现。

3.驱动执行环境

有DXE基础、DXE分发器以及一系列驱动。这一阶段主要是把硬件的基本驱动程序加载起来,建立两者间的联系,为更上层的接口提供基础支持,比如显卡驱动就支撑了Print()函数。

4.BDS启动设备选择

开机时的启动菜单就是这一阶段负责生成的,所有的设备都会列出来,搜索原理是寻找具有FAT32分区的设备,这些会生成UEFI认可的菜单项,老一些的电脑还支持MBR分区的硬盘,还有网络适配器,UEFI固件也可以支持从网络远程系统镜像启动。

5.TSL预系统加载阶段

它是OS Loader的主战场,TSL就是正式操作系统加载前的预备阶段,需要Loader找到并加载OS。

6.RT(Runtime)

运行时。

7.AL

最终阶段,由常驻的UEFI驱动组成。计算机关机、休眠、睡眠、重启过程的系统信息都会在这一阶段保存。


仅为笔记学习使用
参考:https://www.zhihu.com/people/tanyugang.com/zvideos?page=2

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

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

相关文章

纯手动搭建大数据集群架构_记录007_搭建Zookeeper3.5.7集群_集群配置_集群脚本---大数据之Hadoop3.x工作笔记0168

然后我们来搭建一下zookeeper集群,这个集群,以后不管是搭建Hadoop高可用,还是nifi集群,还是 hive 集群,hbase集群,spark集群,kettle集群,sqoop集群,都是基础 [root@hadoop122 ~]# cd /opt/software/ [root@hadoop122 software]# ll 总用量 479040 -rw-r--r--. 1 root root 9…

时间颗粒度选择(通过选择时间范围和颗粒度展示选项)

<template><div><el-time-selectplaceholder"起始时间"v-model"startTime":picker-options"startPickerOptions"change"changeStartTime"></el-time-select><el-time-selectplaceholder"结束时间&quo…

【Python】python深拷贝与浅拷贝详解(必须掌握)

深拷贝和浅拷贝是python必须要掌握的内容&#xff0c;无论你是面试开发、测试、运维等职位&#xff0c;只要是python&#xff0c;深拷贝与浅拷贝是面试官常问的一个重要知识点。 &#xff08;关注“测试开发自动化” 弓中皓&#xff0c;获取更多学习内容&#xff09; 文章目录一…

软件测试如何进行需求分析,你真的学会了吗?

目录 前言 从宏观的角度看需求文档 从细节的角度看需求文档 1&#xff09;结构化项目流程 2&#xff09;确认影响模块 3&#xff09;考量综合因素 需求的测试成本与质量风险 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配…

Win11安卓应用自动化测试的准备

前言 APP的自动化测试&#xff0c;前提从ADB连接设备&#xff0c;启动APK应用开始。Win 11自带的WSA的APP的测试&#xff0c;要完全自动化&#xff0c;需要解决几个问题。 1、 启动WSA 此项有两步&#xff1a; i 启动WSA服务 Python程序来启动服务&#xff0c;可以直接调用…

DP1621国产LCD驱动芯片兼容替代HT1621B

目录DP1621简介DP1621芯片特性DP1621简介 DP1621是点阵式存储映射的LCD驱动器芯片&#xff0c;可支持最大128点&#xff08;32SEG * 4COM&#xff09;的 LCD屏&#xff0c;也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发送显示数据&#xff0c;也可通过指…

jmeter基本使用

jmeter基本使用 1.jemeter基本介绍 Jmeter 是什么 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测 试JMeter 可用于 Web 应用测试&#xff0c;后来扩展到了其他测试领域具体来说, Jmeter 可以测试静态和动态资源&#xff0c;比如…

C语言Switch语句用法

C switch 语句 一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case&#xff0c;且被测试的变量会对每个 switch case 进行检查。 语法 C 语言中 switch 语句的语法&#xff1a; switch(expression){case constant-expression :statement(s);break;…

论索引的重要性

开篇小测验下面这样一个小SQL 你该怎么样添加最优索引两个表上现在只有聚集索引bigproduct 表上已经有聚集索引 ProductIDbigtransactionhistory 表上已经有聚集索引 TransactionID你是否一眼就能看出来呢&#xff1f;答案将在文章中逐步揭晓~~~简单粗暴的添加索引首先我们看一…

企业如何做好员工安全意识提升

背景&#xff1a; 近年来随着网络安全政策、技术的不断发展&#xff0c;国内企业对于安全的重视程度越来越高&#xff0c;安全建设投入力度越来越大&#xff0c;安全防御能力得到了明显的提升。然而&#xff0c;企业面临一个尴尬的问题就是&#xff0c;企业即使做了很多安全防…

Java还值得选择吗?

自1995年Java问世&#xff0c;到2023年已经差不多存在了28年。作为高级编程语言&#xff0c;他的生命周期相比很多编程语言都长&#xff0c;也见证了很多编程语言的辉煌时刻&#xff0c;不过Java始终都是名列前茅。 Java的主要优势在于其一次编写、随处运行。简单来讲&#xf…

185、【栈与队列】leetcode ——496. 下一个更大元素 I:单调栈-哈希表(C++版本)

题目描述 原题链接&#xff1a;496. 下一个更大元素 I 解题思路 本题与 739. 每日温度 的区别在于&#xff0c;需要先通过让nums1与nums2判定出为想等元素后&#xff0c;再去找nums2中更大的数。 因此&#xff0c;第一步需要找到想等数&#xff0c;第二步需要找到大于的数。…

快手电商新增商品信息诊断规则,对商家有何影响?

1、2022年快手短剧日活跃用户达2.6亿 新榜讯 近日&#xff0c;快手数据显示&#xff0c;2022年快手短剧日活跃用户达2.6亿&#xff0c;现在的付费用户数对比2022年4月增长超过480%&#xff0c;快手已经是最大的短剧消费市场。此外&#xff0c;2023年快手小游戏日活跃用户峰值超…

【Go】基于telegraf进行自定义插件开发(二)

基于telegraf进行自定义插件开发&#xff08;二&#xff09;前言正文设计开发过程单个服务的处理结构体同时定义了string和数值类型适配本机服务或者多个ip来源程序打包结语前言 书接上会&#xff0c;这次记录一下我基于telegraf进行的hdfs监控组件的开发工作&#xff0c;这其…

RabbitMQ实现延时队列

目录什么是延时队列延时队列的使用场景前提准备利用RabbitMQ实现延时队列延时队列优化利用RabbitMQ插件实现延迟队列什么是延时队列 延时队列&#xff0c;首先&#xff0c;它是一种队列&#xff0c;队列意味着内部的元素是有序的&#xff0c;元素出队和入队是有方向性的&#…

沃尔玛采购退款大额过不了的原因是什么?

市面上有很多伪装工具&#xff0c;但不是针对沃尔玛&#xff0c;很多软件方只是针对大众平台伪装&#xff0c;主要是方便程序开发人员调测系统程序&#xff0c;并不是能用于沃尔玛行业。而且每一个平台的风控是不—样的&#xff0c;我们技术团队从底层硬件环境开始配合软件控制…

【论文精读】MVSNet系列(2018-2022)总结

MVSNet系列总结1.MVSNet ECCV20182.RMVSNet CVPR20193.P-MVSNet ICCV20194.MVSCRF ICCV20195.PointMVSNet ICCV20192019年的这四篇文章各有特点&#xff0c;其中RMVSNet、PointMVSNet更是打开了可以继续沿着往下做的思路&#xff1a;6.cascade MVSNet CVPR20207.UCSNet CVPR202…

初识go变量,使用var和:=来声明变量,声明变量的三种方式

初识go变量,使用var和:来声明变量&#xff0c;声明变量的三种方式 Go语言的变量名由字母、数字、下划线组成&#xff0c;其中首个字符不能为数字。 tip:(Go语言中的变量的规范&#xff0c;也和其他高级语言相同) 声明变量的一般形式是使用 var 关键字&#xff1a; var 变量…

SpringCloud源码探析(二)-Nacos注册中心

1.概述 Nacos是Spring Cloud Alibaba中的核心组件之一&#xff0c;它提供了服务发现、服务配置和服务管理等功能&#xff0c;可以作为注册中心和配置中心使用。注册中心是微服务架构体系中的核心组件之一&#xff0c;Nacos比Eureka有着更强大的功能&#xff0c;它们都能提供服…

Java多线程系列-- ForkJoin框架,分治的艺术

前言 本篇是多线程系列中的一篇&#xff0c;我们在先前的一篇文章中回顾了线程池的主要知识 Java多线程基础–线程的创建与线程池管理 过去了很长时间&#xff0c;我们简单提要一下&#xff1a; 设计目的&#xff1a;简化线程的使用&#xff0c;管理与复用&#xff0c;避免…