UEFI学习笔记(十):系统表与ACPI表的遍历

一、概述

在 UEFI 系统表中,有几个关键的表用于提供系统信息、服务和硬件抽象。这些表可以通过 EFI_SYSTEM_TABLE 访问,常见的 UEFI 系统表如下:

1、EFI_SYSTEM_TABLE (系统表)

EFI_SYSTEM_TABLE 是一个指针,包含多个服务和系统信息。
包含以下几个重要表:

2、EFI_BOOT_SERVICES (引导服务表):

提供在引导期间可用的功能(如内存分配、事件管理、协议处理等)。

3、EFI_RUNTIME_SERVICES (运行时服务表):

提供操作系统加载后仍可使用的服务(如变量管理、时间功能和固件更新等)。

4、EFI_CONFIGURATION_TABLE (配置表):

包含各种硬件信息和平台信息,包含 ACPI、SMBIOS、HOB(Hand-off Block)等表。

二、遍历ACPI表

ACPI结构

VOID ListAllAcpiTables(VOID)
{UINTN     i, j, EntryCount;CHAR8     strBuff[20];UINT64    *EntryPtr;EFI_GUID  AcpiTableGuid  = ACPI_TABLE_GUID;EFI_GUID  Acpi2TableGuid = EFI_ACPI_TABLE_GUID;EFI_CONFIGURATION_TABLE   *configTab = NULL;  EFI_ACPI_DESCRIPTION_HEADER           *XSDT, *Entry;EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *Root;Print(L"List All ACPI Tables:\n");configTab = gST->ConfigurationTable;for (i = 0; i < gST->NumberOfTableEntries; i++) {   // Step1: 查找 ACPI 表if ((CompareGuid(&configTab->VendorGuid, &AcpiTableGuid) == 0) ||(CompareGuid(&configTab->VendorGuid, &Acpi2TableGuid) == 0)) { Print(L"Found ACPI table: %g\n", &configTab->VendorGuid); Root = configTab->VendorTable;Print(L"ROOT SYSTEM DESCRIPTION @[0x%p]\n", Root);// Step2: 检查修订版本(只接受修订版本 >= 2)if (Root->Revision >= EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION) {// Step3: 获取 XSDT 表地址XSDT = (EFI_ACPI_DESCRIPTION_HEADER *)(UINTN) Root->XsdtAddress;EntryCount = (XSDT->Length - sizeof(EFI_ACPI_DESCRIPTION_HEADER)) / sizeof(UINT64);Print(L"XSDT address = [0x%p]\n", XSDT);Print(L"XSDT-Length = 0x%x\n", XSDT->Length);Print(L"Number of ACPI Tables = %d\n", EntryCount);// Step4: 遍历每个 ACPI 表并输出信息EntryPtr = (UINT64 *)(XSDT + 1);for (j = 0; j < EntryCount; j++, EntryPtr++) {Entry = (EFI_ACPI_DESCRIPTION_HEADER *)((UINTN)(*EntryPtr));// 输出每个表的签名、长度和校验和等基本信息ZeroMem(strBuff, sizeof(strBuff));CopyMem(strBuff, &(Entry->Signature), sizeof(UINT32));Print(L"Table Signature: %a\n", strBuff);Print(L"Table Address: 0x%p\n", Entry);Print(L"Table Length: 0x%x\n", Entry->Length);Print(L"Table Checksum: 0x%x\n", Entry->Checksum);}}}configTab++;}
}

整个函数 ListAllAcpiTables 的逻辑是:

1)遍历系统配置表。
2) 查找 ACPI 表,并验证 RSDP 的版本。
3) 从 RSDP 获取 XSDT 表的地址,并计算其中的 ACPI 表数量。
4) 遍历所有 ACPI 表,打印它们的基本信息

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

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

相关文章

docker-compose无法切换用户

问题描述 jupyter:image: flink:1.19-pyprivileged: trueuser: rootports:- "9999:8888"volumes:- /data/docker_data/jupyter:/workcommand: sh -c "cd / && jupyter notebook --ip 0.0.0.0 --port 8888 --allow-root --NotebookApp.passwordsha1:658…

『网络游戏』动态界面制作创建角色UI【02】

将上一章的登录界面隐藏 创建空物体重命名为CreateWnd 自适应铺满父物体 创建image重命名为bg并铺满 将以下资源图片放进Art文件夹 设置为精灵模式 填充背景 创建介绍Image面板与角色按钮 制作将3D模型动态防止UI界面上 首先创建RawImage 创建RenderTextures文件夹 创建Render…

数字王国里的虚拟人――技术、商业与法律解读

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【海拥导航】&#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/HDQZJEQiCJb9cFi&#x1f485; 想寻找共同学习交流&#xff0c;摸鱼划水的小伙伴&#xff0c;请点击【全栈技…

DS1302时钟模块(STM32)

目录 一、介绍 二、模块原理 1.原理图 2.引脚描述 3.工作原理&#xff1a;读/写时序 4.寄存器地址/定义 三、程序设计 main.c文件 ds1302.h文件 ds1302.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 DS1302是一款由达拉斯半导体&#xff08;Dallas Semic…

第三方软件测评机构简析:软件安全测试报告的内容和作用

随着数字化时代的到来&#xff0c;软件的安全性显得尤为重要。尤其在信息安全事件频发的今天&#xff0c;软件安全测试报告成为企业和开发者关注的焦点。软件安全测试报告是评估软件系统安全性的一种综合性文档&#xff0c;通常在软件开发生命周期中进行安全性测试后生成。 软…

windows C++-创建图像处理的异步消息(二)

创建图像处理网络 此部分介绍如何创建对给定目录中的每个 JPEG (.jpg) 图像执行图像处理的异步消息块网络。 网络执行以下图像处理操作&#xff1a; 对于 Tom 创作的任何图像&#xff0c;转换为灰度。 对于任何以红色作为主色的图像&#xff0c;移除绿色和蓝色分量&#xff0…

嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)

前言&#xff1a; 本文是基于B站草履虫编写的平衡车相关内容&#xff0c;包括模块和基础知识&#xff0c;结合代码进行讲解&#xff0c;将知识进行汇总 &#xff08;由于本篇内容较长&#xff0c;请结合目录使用) 注&#xff1a;基于开源精神&#xff0c;本文仅供学习参考 目…

Java—逻辑控制与输入输出

各位看官&#xff1a;如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 一.顺序结构&#xff1a; 我每天起床&#xff0c;躺在床上玩手机&#xff0c;然后吃中午饭&#xff0c;睡…

PIFA天线工作原理:【图文讲解】

1&#xff1a;什么是PIFA天线 PIFA ( Planar Inverted F-shaped Antenna)天线即平面倒F形天线&#xff0c;因为整个天线的形状像个倒写的英文字母F而得名 2&#xff1a;PIFA天线的应用 PIFA常见于手机天线设计&#xff0c;占手机内置天线的60%-80% 3&#xff1a;PIFA天线结构…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-09目录1. Can LLMs plan paths with extra hints from solvers?摘要创新点算法模型实验效果重要数据与结论 推荐阅读指数 2. Sc…

SQL第14课挑战题

1. 将两个select语句结合起来&#xff0c;以便从OrderItems表中检索产品ID(prod_id)和quantity。其中&#xff0c;一个select语句过滤数量为100的行&#xff0c;另一个select语句过滤ID以BNBG开头的产品。按产品ID对结果进行排序。 2. 重新第一题&#xff0c;仅使用单个select语…

【原创】可用于 Android Studio 的翻译插件

在不少讲解Android 开发的老师视频中会出现一个运行在Android Studio 上的翻译插件&#xff0c;感觉挺实用的。 接下来&#xff0c;我们把它安装在我们的Android Studio 上。 设置 点击右上角齿轮按钮&#xff0c;选择Settings 安装 翻译插件 输入Tanslation&#xff0c;选…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中&#xff0c;突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢&#xff0c;因为在我使用DeepFilter的过程中&#xff0c;我发现对于一些低信噪比的信号来说&#xff0c;DeepFilter很容易出现过拟合现象&#xff0c;导致音源…

低质量数据的多模态融合方法

目录 多模态融合 低质量多模态融合的核心挑战 噪声多模态数据学习 缺失模态插补 平衡多模态融合 动态多模态融合 启发式动态融合 基于注意力的动态融合 不确定性感知动态融合 论文 多模态融合 多模态融合侧重于整合多种模态的信息,以实现更准确的预测,在自动驾驶、…

08_OpenCV文字图片绘制

import cv2 import numpy as npimg cv2.imread(image0.jpg,1) font cv2.FONT_HERSHEY_SIMPLEXcv2.rectangle(img,(500,400),(200,100),(0,255,0),20) # 1 dst 2 文字内容 3 坐标 4 5 字体大小 6 color 7 粗细 8 line type cv2.putText(img,flower,(200,50),font,1,(0,0,250)…

c#-出现类型初始值设定项引发异常的解决方案

当出现该问题时&#xff0c;通常摸不着头脑&#xff0c;无法定位到该问题所在行。 我们可以找到应发异常的类&#xff0c;例如我上面类为YY_Model.DefaultConfig。 打开这个类文件&#xff0c;加一个断点&#xff0c;一行行运行&#xff0c;到哪里突然跳出该文件&#xff0c;则…

(计算机毕设)基于Vue和Spring Boot的宠物救助网站设计与实现

博主可接毕设&#xff01;&#xff01;&#xff01; 毕业设计&#xff08;论文&#xff09; 基于Vue和Spring Boot的宠物救助网站设计与实现 摘 要 随着中国互联网的迅猛发展&#xff0c;传统宠物救助领域面临着信息管理繁琐、辐射范围有限、信息传播受限、丢失宠物找回几率较…

机器学习框架(含实例说明)

机器学习框架是用于开发和部署机器学习模型的软件库和工具集。它们提供了一系列的算法、工具和基础设施&#xff0c;帮助开发者更高效地构建、训练和部署机器学习模型。以下是一些主要的机器学习框架及其详细介绍&#xff1a; 1. TensorFlow TensorFlow 是由Google开发的开源…

卫瓴科技,驶向「协同CRM」深水区

在卫瓴协同CRM的产品之上&#xff0c;能看到的不单纯是产品本身&#xff0c;即“提高转化率”这个单纯的指标&#xff0c;而更多的是在产品之中蕴含的“现代企业营销建设”的科学理念和认知。以此为基础&#xff0c;企业可以构建真正有价值且能长期驱动的品牌营销模型。 作者…

攻防世界---->sherlock

做题笔记。 下载。 单词中出现大写很可疑。因为大写最多出现在开头等。 猜测是隐写术。 进行筛选。 借助python实现 with open(C:\\Users\\Acer\\Downloads\\f590c0f99c014b01a5ab8b611b46c57c.txt, r) as file:text file.read() uppercase_letters [char for char in text…