关于Intel Press出版的《Bedyong BIOS》第2版的观后感

文章目录

    • 此书的背景
    • UEFI运行时
    • DXE基础
    • CPU架构协议
    • PCI协议
    • UEFI驱动的初始化
    • 串口DXE驱动示例

《Beyond BIOS》首先介绍一个简单的UEFI应用程序模块,用于展示UEFI应用程序的行为。作者为Waldo。该模块名为“InitializeHelloApplication”,它接受两个参数:ImageHandle和SystemTable。在程序中,首先向ConsoleOut设备发送一条消息,然后等待用户按下任意键,最后退出应用程序并返回EFI_SUCCESS状态。要执行该UEFI应用程序,可以在UEFI Shell命令行中输入程序名。假设hello.efi在UEFI Shell环境的搜索路径中,可以通过示例Shell> hello来运行该应用程序。该应用程序在用户按下任意键后返回UEFI Shell提示符。本文还提供了一些注释和说明,以帮助读者更好地理解程序的作用和功能。通过这个简单的UEFI应用程序模块,读者可以了解UEFI应用程序的基本结构和行为,以及如何使用UEFI API进行简单的输入输出和操作系统的加载。

在这里插入图片描述

此书的背景

主要介绍了从硬件到软件的飞跃如何带来一段无政府状态和崩溃的时期,特别是在发达国家。这一版还概述了从可扩展固件接口(EFI)到统一可扩展固件接口(UEFI)的演变,以及从英特尔框架规范到UEFI平台初始化(PI)规范的转变。注意,在规范的标题中省略了“Framework”一词。此外,这一章还讨论了UEFI PI规范如何成为行业标准,以及UEFI PI规范如何帮助行业成员更好地实现系统启动和运行。

  1. 该书第二版的出版是经过了时间的考验,因为自从第一版问世以来,技术进步已经取得了巨大的进步。
  2. 对于UEFI和GPT等术语的解释和说明,以便读者更好地理解这些技术在现代计算机系统中的重要性和应用。
  3. 该书的目标仍然是帮助读者理解这些新技术,以及它们在构建现代计算机系统中的角色和作用。
  4. 作者对读者的感谢和认可,以及对支持和鼓励他完成这本书的人的感谢。

UEFI运行时

UEFI Runtime是UEFI(统一可扩展固件接口)规范中的一部分,它定义了在系统引导过程中,固件将控制权交给操作系统后,依然能提供给操作系统运行时使用的服务。这些服务包括系统配置信息、各种UEFI服务和函数等。

在系统引导过程中,当UEFI将控制权交给操作系统后,会继续运行一些服务,这就是UEFI Runtime。这些服务主要运行在固件和操作系统之间,为操作系统提供必要的支持和功能。

具体来说,UEFI Runtime主要提供以下服务:

  1. 系统配置信息:UEFI Runtime提供了一种方式,让操作系统可以获取系统的配置信息,如处理器、内存、硬盘等硬件信息,以及启动参数等。
  2. UEFI服务:UEFI Runtime还提供了一些UEFI服务,如内存管理、文件系统、网络服务等。这些服务可以帮助操作系统更好地运行和管理系统资源。
  3. 运行时函数:UEFI Runtime还提供了一些运行时函数,如重启、关机等操作。这些函数可以在操作系统的运行过程中被调用,以便进行一些系统级别的操作。

需要注意的是,UEFI Runtime并不是一个完整的操作系统,它只是提供了一些必要的服务和函数,以便操作系统可以更好地运行和管理系统资源。

DXE基础

DXE指的是平台初始化驱动执行环境,它在UEFI(统一可扩展固件接口)的预引导阶段和PEI(Pre-EFI Initialization)阶段之间起着关键的作用。DXE的主要功能是将平台硬件映射到各种硬件平台上,以便在UEFI服务可用之前执行。

在DXE阶段,一些重要的组件包括DXE核心、DXE调度程序和DXE驱动程序。DXE核心提供了一个执行环境,它负责将PEI的核心服务映射到各种硬件平台上。DXE调度程序负责在DXE服务中调度和执行各种服务。DXE驱动程序则负责与硬件交互,以便在UEFI服务可用之前执行。

此外,DXE还包括一些重要的协议,例如ACPI(高级配置和电源接口)编辑协议和SIO(系统输入输出)协议。ACPI编辑协议用于编辑和读取ACPI表,这些表描述了系统的硬件配置和电源管理设置。SIO协议则提供了与系统输入/输出设备的通信功能。

在DXE阶段还有一些重要的概念,例如BDS(Boot Device Selection)阶段。BDS阶段是在UEFI服务可用之前执行的,它负责选择启动设备并加载启动设备上的引导加载程序。

总之,DXE是UEFI固件的一个重要组成部分,它提供了一个执行环境,将平台硬件映射到各种硬件平台上,以便在UEFI服务可用之前执行。它还包括一些重要的组件和协议,以提供必要的服务和与硬件交互的功能。

CPU架构协议

主要介绍了UEFI的定义、重要概念和协议、系统管理模式的更新、设备驱动模型的交互作用以及安全功能等内容。

  1. 介绍了Unified Extensible Firmware Interface (UEFI)的定义和作用。UEFI是一种描述平台硬件接口的规范,它允许在预操作系统阶段进行一些操作,如加载驱动、运行诊断等。
  2. 描述了UEFI中的一些重要概念和协议,如Multiprocessor Protocol、Itanium E-SAL and MCA support、Report-status code listener、SMBIOS protocol、ACPI editing protocol、SIO protocol等。
  3. 介绍了UEFI在系统管理模式的更新,包括对SMM协议和基础设施的抽象化处理,以及将各种CPU和芯片组的实现从更通用的组件中分离出来。
  4. 描述了UEFI在设备驱动模型中的交互作用,包括如何配置基础设施和使用配置基础设施等。
    介绍了UEFI的安全功能,如Trusted Platform Module (TPM)和Measured Boot等。

PCI协议

  1. PCI I/O Protocol:这是一种由PCI总线驱动程序为每个PCI设备安装的协议实例。每个PCI I/O协议实例都配备了针对该PCI设备独特的数据值,包括UEFI选项ROM(OpROM)图像的位置和大小。
  2. Driver Model Interactions:介绍了如何使用配置基础设施来管理驱动程序模型之间的交互。
  3. Provisioning the Platform:介绍了如何使用配置基础设施来配置和启动平台组件,以及如何使用UEFI Secure Boot和UEFI Executable Verification等机制来确保平台的安全性和可信性。

UEFI驱动的初始化

UEFI驱动的初始化在UEFI固件加载后开始,主要在UEFI的SEC(安全验证)阶段进行。在这个阶段,计算机系统加电后进入SEC阶段,执行以下四种任务:

  1. 对计算机系统的基本硬件进行安全验证。
  2. 对计算机系统的固件进行加载。
  3. 初始化固件所需要的硬件设备。
  4. 执行其他必要的初始化操作。

在SEC阶段结束后,PEI(EFI前期初始化)阶段开始,这个阶段主要进行硬件的初始化工作。然后是DXE(驱动执行环境)阶段,在这个阶段,UEFI驱动程序被加载并准备运行。BDS(启动设备选择)阶段和TSL(操作系统加载前期)阶段是操作系统加载器作为UEFI应用程序运行的阶段。最后是RT(Run Time)阶段和AL(系统灾难恢复期)阶段。RT阶段包括操作系统加载器后期和操作系统运行期,当系统硬件或操作系统出现严重错误不能继续正常运行时,固件会尝试修复错误,这时系统进入AL期。但PI规范和UEFI规范都没有规定AL期的行为。

串口DXE驱动示例

DXE驱动的一般开发过程如下:

  1. 确定需要开发的DXE驱动的用途和功能,例如用于初始化某个硬件设备或提供某个特定的服务。
  2. 了解DXE驱动的架构和规范,包括UEFI规范和相关的协议,例如ACPI编辑协议和SIO协议等。
  3. 编写DXE驱动的代码,包括驱动程序的入口点、服务处理函数、回调函数等。
  4. 编译DXE驱动的代码,生成可执行文件。
  5. 将可执行文件加载到UEFI固件中,并测试DXE驱动的功能和稳定性。

下面是一个示例:

#include <Protocol/SimpleFilesystem.h>  
#include <Protocol/SerialPort.h>  
#include <Protocol/DevicePath.h>  
#include <Library/BaseLib.h>  
#include <Library/DebugLib.h>  // 串口DXE驱动程序入口点  
EFI_STATUS  
EFIAPI  
SerialDxeInitialize(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)  
{  // 获取串口设备路径  EFI_DEVICE_PATH_PROTOCOL *DevicePath;  DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) ImageHandle;  // 获取串口参数  UINTN BaudRate = 9600;  UINTN DataBits = 8;  UINTN Parity = 0;  UINTN StopBits = 1;  // 初始化串口  EFI_STATUS Status;  Status = gBS->LocateProtocol(&gEfiSerialPortProtocolGuid, NULL, (VOID **)&SerialPort);  if (EFI_ERROR(Status)) {  return Status;  }  Status = SerialPort->Initialize(SerialPort, BaudRate, DataBits, Parity, StopBits);  if (EFI_ERROR(Status)) {  return Status;  }  // 打开串口并测试连接是否正常  Status = SerialPort->Open(SerialPort, DevicePath);  if (EFI_ERROR(Status)) {  return Status;  }  CHAR16 Buffer[10];  Status = SerialPort->Read(SerialPort, Buffer, sizeof(Buffer));  if (EFI_ERROR(Status)) {  return Status;  }  // 返回成功状态码  return EFI_SUCCESS;  
}

INF文件配置:

[Defines]
INF_VERSION =0x00010005
BASE_NAME = SerialDxe
FILE_GUID = 0x12345678-0x1234-0x1234-0x1234-0x123456789abc
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
ENTRY_POINT = SerialDxeInitialize
  1. INF_VERSION:INF文件的版本号,这里设置为0x00010005。
  2. BASE_NAME:驱动程序的名称,这里设置为SerialDxe。
  3. FILE_GUID:驱动程序的GUID,这里随意设置了一个值。
  4. MODULE_TYPE:驱动程序的类型,这里设置为DXE_DRIVER。
  5. VERSION_STRING:驱动程序的版本号,这里设置为1.0。
  6. ENTRY_POINT:驱动程序的入口点函数,这里设置为SerialDxeInitialize。

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

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

相关文章

Leetcode—101.对称二叉树【简单】

2023每日刷题&#xff08;十九&#xff09; Leetcode—101.对称二叉树 利用Leetcode101.对称二叉树的思想的实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSa…

【深度学习基础】Pytorch框架CV开发(1)基础铺垫

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

3 — NLP 中的标记化:分解文本数据的艺术

一、说明 这是一个系列文章的第三篇文章&#xff0c; 文章前半部分分别是&#xff1a; 1 、NLP 的文本预处理技术 2、NLP文本预处理技术&#xff1a;词干提取和词形还原 在本文中&#xff0c;我们将介绍标记化主题。在开始之前&#xff0c;我建议您阅读我之前介绍的关…

Docker的简单安装

安装环境 CentOS Linux release 8.1.1911 (Core)内核4.18.0-147.el8.x86_64Mini Installation 安装前的准备工作 切换国内源 由于centos源已经过期&#xff0c;所以切换为阿里云的yum源&#xff0c;第二个是docker的仓库 wget -O /etc/yum.repos.d/CentOS-Base.repo https:…

云闪付app拉新推广一手渠道 附详细教程

云闪付推广拉新可以通过“聚量推客”申请 云闪付是什么呢&#xff1f;是中国银联出的支付平台&#xff0c;在地推和网推项目里也算是比较火热的app拉新产品&#xff0c;属于地推和网推的百搭项目&#xff0c;操作也简单 只需要动账就算一个数据&#xff0c;目前主要招收地推、…

重新思考边缘负载均衡

本文介绍了Netflix在基于轮询的负载均衡的基础上&#xff0c;集成了包括服务器使用率在内的多因素指标&#xff0c;并对冷启动服务器进行了特殊处理&#xff0c;从而优化了负载均衡逻辑&#xff0c;提升了整体业务性能。原文: Rethinking Netflix’s Edge Load Balancing[1] 我…

第十五章 EM期望极大算法及其推广

文章目录 导读符号说明混合模型伯努利混合模型(三硬币模型)问题描述三硬币模型的EM算法1.初值2.E步3.M步初值影响p,q 含义 EM算法另外视角Q 函数BMM的EM算法目标函数LEM算法导出 高斯混合模型GMM的EM算法1. 明确隐变量, 初值2. E步,确定Q函数3. M步4. 停止条件 如何应用GMM在聚…

软测推荐第二期:10本高质量测试书籍

在不断发展的软件开发领域&#xff0c;测试是质量的守护者&#xff0c;确保产品不仅满足功能要求&#xff0c;而且提供无缝的用户体验。随着软件复杂性的增加&#xff0c;对完善的测试方法和见解的需求也随之增加。 上次给大家推荐了五本书&#xff0c;获得了大家的积极反馈&a…

RT-Thread系统使用常见问题处理记录

1.使用telnet连接系统时发送help指令显示不全的问题。 原因&#xff1a;telnet发送缓存太小。 解决办法&#xff1a;更改agile_telnet软件包里Set agile_telnet tx buffer size的大小。 2.使用Paho MQTT软件包过一段时间报错hard fault on thread: mqtt0 解决办法&#xff1…

UE5加载websocket模块为空

今天测试UE 发现工程启动不了&#xff0c;后来看到原来是websocket模块无法加载。 解决的它的方法很简单&#xff0c;这种问题一般会出现在源码版本的引擎或者是停电了&#xff0c;导致UElaunch版本损坏&#xff0c;解决方法是来到源码版本的引擎 这个目录下&#xff1a; D:\…

稳定性测试—fastboot和monkey区别

一、什么是稳定性测试 稳定性测试是指检验程序在一定时间内能否稳定地运行&#xff0c;在不同的场景下能否正常地工作的过程。主要目的是检测崩溃、内存泄漏、堆栈错误等缺陷。 二、Monkey 1.什么是Monkey 是一个命令行工具&#xff0c;通常在adb安卓调试运行&#xff0c;模…

ABAP简单的队列设置QRFC

场景&#xff1a;用job的方式在接口里启用job&#xff0c;如果接口调用比较频繁&#xff0c;存在同一时间启动相同job的情况&#xff0c;会导致锁表锁程序这种情况。 查阅job函数&#xff0c;发现在JOB_CLOSE函数里自带了类似队列的参数&#xff0c;但是因为是接口&#xff0c…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好&#xff0c;我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢&#xff1f; 本文通过图片文字&#xff0c;详细讲解具体步骤&#xff1a; 如何卸载干净 IDEA&#xff08;图文讲解&#xff09; Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

重生奇迹mu下载后仅仅只是挂机吗?

挂挂机、聊聊天&#xff0c;打打怪&#xff0c;如此简单、轻松的游戏或许有&#xff0c;但绝对不是重生奇迹mu&#xff01;因为重生奇迹mu挂机也不是那么容易&#xff0c;即便是多名高端玩家组队挂机&#xff0c;也有可能是全队惨灭&#xff0c;这样的情况时常发生在游戏中。 …

【入门Flink】- 05Flink运行时架构以及一些核心概念

系统架构 Flink运行时架构Standalone会话模式为例 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager 是一个 Flink 集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…

聚观早报 |盒马参战双11;真我GT5 Pro将压轴登场

【聚观365】11月4日消息 盒马参战双11 真我GT5 Pro将压轴登场 奇瑞汽车10月销量创新高 iQOO 12系列将首发电竞芯片Q1 苹果CEO库克称正改善供需平衡 盒马参战双11 不少消费者反映&#xff0c;今年盒马的双11已悄然开始&#xff1a;10月20日起&#xff0c;盒马APP很多商品页…

【3D图像分割】基于 Pytorch 的 VNet 3D 图像分割3(3D UNet 模型篇)

在本文中&#xff0c;主要是对3D UNet 进行一个学习和梳理。对于3D UNet 网上的资料和GitHub直接获取的代码很多&#xff0c;不需要自己从0开始。那么本文的目的是啥呢&#xff1f; 本文就是想拆解下其中的结构&#xff0c;看看对于一个3D的UNet&#xff0c;和2D的UNet&#x…

python实现MC协议(SLMP 3E帧)的TCP服务端(篇二)

python实现MC协议&#xff08;SLMP 3E帧&#xff09;的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样&#xff0c;可以使用现成的pymodbus模块去实现。但是&#xff0c;我们可以根据协议帧进行组包&#xff0c;自己去实现帧的格式&#xff0c;而这一切可以基于socket模…

Zephyr-7B-β :类GPT的高速推理LLM

Zephyr 是一系列语言模型&#xff0c;经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型&#xff0c;是 Mistralai/Mistral-7B-v0.1 的微调版本&#xff0c;使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现&#xff0c;删除这些数据集的…

系列五、映射文件xxxMapper.xml

一、概述 mapper映射文件是mybatis中最重要的部分&#xff0c;涉及到的细节也非常多。 1.1、parameterType 表示输入参数的类型。例如&#xff1a; <select id"getUserById" parameterType"integer" resultType"org.star.entity.model.UserDO&…