UEFI/BIOS-----关于ACPI

什么是ACPI

 高级配置和电源管理接口,APCI是一套协议标准,软硬件都需要实现以配合使用。

大致作用:ACPI在BIOS中负责管理计算机的电源状态和配置,支持系统休眠、唤醒等高级电源管理功能

APCI系统架构流程

在这里插入图片描述
 由上面的结构可知:它的规范所设计主要是由上图红框,ACPI registers组成、ACPI BIOS、ACPI Tables三部分组成。首先需要硬件支持,并提供ACPI需要使用的寄存器,然后还需要一系列的表来规定划分模块和定义接口,最后接着bios需要支持ACPI,实现并提供相应的回调。

ACPI可以实现的功能包括

1.系统电源管理(System power management)

2.设备电源管理(Device power management)

处理器电源管理(Processor power management)

3.设备和处理器性能管理(Device and processor performance management)

4.配置/即插即用(Configuration/Plug and Play)

5.系统事件(System Event)

6.电池管理(Battery management)

7.温度管理(Thermal management)

8.嵌入式控制器(Embedded Controller)

9.SMBus控制器(SMBus Controller)

ACPI定义的电源状态转化结构图

在这里插入图片描述
 G0/G1/G2/G3表示整体的状态,S1/S2/S3/S4/S5表示睡眠状态, C1/C1…/Cn和P0/P1…Px就是Pstates(EIST)和CStates,D0/D1/D2/D3表示不同的设备电源状态。G/C/S等状态,后接的数字越大,系统耗能越少。

ACPI表

 ACPI表是一组数据结构,每个结构体都有固定的表头格式,以及自己特有的格式,它们提供了有关系统硬件的信息,以便操作系统能够识别和管理硬件设备。这些表包括一些预定义的表,如DSDT(Differentiated System Description Table)、FADT(Fixed ACPI Description Table)和SSDT(Secondary System Description Table),以及其他可选的表。

  1. DSDT(Differentiated System Description Table):这是最重要的ACPI表,它描述了系统的主要硬件配置,包括主板、CPU、内存、PCI设备等。操作系统启动时会首先解析DSDT表,以获取系统硬件信息。

  2. FADT(Fixed ACPI Description Table):这是ACPI规范必需的表,它定义了ACPI系统的基本硬件特性,如电源状态、睡眠状态、唤醒设备等。FADT表用于指导操作系统如何管理系统电源。

  3. SSDT(Secondary System Description Table):这是可选的表,用于描述某些特定的硬件设备,如温度传感器、风扇控制器、专用硬件设备等。如果系统中有这些特殊设备,则会包含对应的SSDT表。

  4. MADT(Multiple APIC Description Table):这是可选表,用于描述高级可编程中断控制器(APIC)以及中断源。如果系统使用APIC,则会包含MADT表。

  5. MCFG(PCI Express Memory Mapped Configuration Space Base Address Description Table):这是可选表,用于描述PCI Express总线上的PCI Express配置空间。如果系统使用PCI Express,则会包含MCFG表。

  6. XSDT(Extended System Description Table):这是可选表,与DSDT表类似,描述系统的全部ACPI表。XSDT表支持更大的表地址空间,可引用更多的ACPI表。

  7. 其他可选表:如BERT(Boot Error Record Table)、CPEP(Corrected Platform Error Polling Table)、EINJ(Error Injection Table)等。

为了让OSPM能够控制计算机上的设备的资源和热插拔,ACPI提供了一种描述这些设备的信息和控制方式的结构,称为ACPI Definition Blocks,它们按照一种层级结构组织,这种组织方式成为ACPI Namespace。这个命令空间的开始是ROOT,符号“/”,下面又分配了几个预定义的命令空间:

在这里插入图片描述
在这里插入图片描述
ACPI Definition Blocks包含在DSDT(Differentiated System Description Table)和很多的二级表(SSDT,Secondary System Description Tables)之中。

ACPI中二级表可以又很多,并且可以不断增加。

ACPI表由BIOS创建,并存放在内存中,OS需要一个入口去获取到所有的表。

入口由BIOS放在某个固定的位置(对于Legacy BIOS和UEFI,OS获取的方式不同),这个入口被称为RSDP,Root System Description Pointer。它是一个结构体,其结构如下:

struct acpi_table_rsdp {
    char        signature[8];      /* ACPI signature, contains "RSD PTR " */
    u8          checksum;         /* Checksum of the first 20 bytes */
    char        oem_id[6];        /* OEM identification */
    u8          revision;         /* Must be 0 for 1.0, 2 for 2.0 */
    u32         rsdt_address;     /* 32-bit physical address of the RSDT */
    u32         length;           /* Length of table in bytes, including header */
    u64         xsdt_address;     /* 64-bit physical address of the XSDT */
    u8          extended_checksum; /* Checksum of entire table */
    char        reserved[3];      /* Reserved, must be 0 */
};

该结构体中,重要的字段有:

  • signature:必须为"RSD PTR ",用以标识该表
  • revision:RSDP规范版本,0表示1.0版,2表示2.0版
  • rsdt_address:32位RSDT表的物理地址
  • xsdt_address:64位XSDT表的物理地址

举例:

// 找到RSDP表
struct acpi_table_rsdp *rsdp;
rsdp = search_rsdp();

// 找到DSDT表
if (rsdp->revision == 0) 
    dsdt = (struct acpi_table_header *)rsdp->rsdt_address;
else
    dsdt = (struct acpi_table_header *)rsdp->xsdt_address;

首先搜索得到RSDP表的地址,然后根据revision字段判断RSDT地址是32位还是64位,从而得到DSDT表的地址,这样就可以解析DSDT表,获取系统ACPI信息了。

=-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------=

 上面的RSDP结构体中,提供了两个主要的物理地址,一个是RSDT表,另外一个是XSDT表

RSDT表全称Root System Description Table,它存放了许多的指针,指向其它的描述系统信息的表。RSDT的结构如下:

typedef struct {
 EFI_ACPI_DESCRIPTION_HEADER Header;
 UINT32                      Entry;
} RSDT_TABLE;

XSDT表全称Extended Root System Description Table,它的作用于RSDT一样,区别在于两者包含的指针地址一个是32位的,一个是64位的。XSDT表结构如下:

typedef struct {
 EFI_ACPI_DESCRIPTION_HEADER Header;
 UINT64                      Entry;
} XSDT_TABLE;

RSDT和XSDT在本质上没有区别,它们都是OS用来找到ACPI表的地图
在这里插入图片描述
XSDT(RSDT)指向的第一张表都是FADT,Fixed ACPI Description Table。这个表里面包含了OS需要知道的所有ACPI硬件相关寄存器(ACPI Hardware Register Blocks,就是下图的GPx_BLK等),还包含DSDT,Differentiated System Description Table,该表包含大量的硬件信息。

这些信息包含在称为Differentiated Definition Block的结构中,它使用一种特殊的语言AML(ACPI Machine Language)表示,而AML语言又通过ASL(ACPI Source Language)编译而成,OEM厂商通过自己写ASL来表示自己的硬件设备信息供OS使用。OS可以利用这些Definition Block来进行各种相关的操作

在这里插入图片描述

什么是ASL

 ASL(ACPI Source Language)是ACPI的源代码语言,用来定义ACPI表如DSDT,SSDT等。

ASL语言具有以下特征:

  • 类似于C语言,同时也支持ACPI定义的关键字和数据类型
  • 用来定义ACPI表中包含的对象,如设备,方法,操作区等
  • 支持宏定义,条件编译等
  • 支持继承,一个定义可以扩展前一个定义
  • 支持 Default 关键字,为对象提供默认值

举个简单的例子:

例如:

DefinitionBlock ("SSDT.aml", "SSDT", 2, "ACPI", "Subsystem", 0x00000000)
{
    External (\_SB.PCI0, DeviceObj)
    External (\_SB.PCI0.GFX0, DeviceObj)

    Scope (\_SB.PCI0.GFX0)
    {
        Method (_DOD) 
        {
            Return (2)  // Device On, Device Stay On
        }

        Method (_DOS, 1) 
        {
            Store (Arg0, \_SB.PCI0.GFX0._FUN023) // Set Display State
        }

        // Other definitions...
    }
}

该例子定义了一个SSDT表,其中包含_SB.PCI0.GFX0域的_DOD方法和_DOS方法,这两个方法就是用ASL语言定义的。

编译ASL代码,可以得到ACPI表的二进制数据,这就是操作系统最终加载和解析的ACPI表数据了。OS到时候就不需要直接去与底层硬件沟通,它只要直接操作这些Asl生成的内容就可以了

所以,ASL是ACPI实现的基石,通过它我们可以根据系统硬件特性,灵活定制ACPI表,为操作系统提供丰富的电源管理功能。

具体学习ASL博客链接:
https://blog.csdn.net/huangkangying/article/details/8007656
https://blog.csdn.net/huangkangying/article/details/11582983
https://blog.csdn.net/huangkangying/article/details/11619379
http://blog.chinaunix.net/uid-26620753-id-5781912.html

ACPI睡眠状态之S3

 ACPI的睡眠状态S3对应于系统的挂起到RAM(Suspend to RAM)状态。

S3睡眠状态的主要特征是:

  • 系统的主存储器内容会被保留,所以睡眠后可以很快恢复运行状态
  • CPU和大部分周边设备被关闭,可以省电
  • 恢复运行后,系统状态与睡眠前基本相同,运行环境不变

该状态由BIOS和操作系统共同管理。当系统进入S3状态时,操作系统会:

  1. 停止大部分硬件设备运作
  2. 将内存内容保留
  3. 将CPU置于低功耗状态
  4. 通知BIOS系统已进入S3状态

BIOS收到通知后,会关闭除必要设备外的其他所有设备,如USB控制器,网络卡等,使系统进入极低功耗状态。

当唤醒系统时,BIOS会重新打开硬件设备,然后操作系统继续从S3前的状态恢复运行。

所以S3状态需要操作系统与BIOS的配合,才能实现低功耗且快速恢复的目的。这也体现了ACPI规范对系统电源管理的设计思想。

在这里插入图片描述

总结来说,ACPI中定义的S3睡眠状态,对应于操作系统实现的Suspend to RAM功能。通过该状态,系统可以在短时间内快速恢复,同时也可以节约较多功耗,实现良好的低功耗特性。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: UEFI BIOS Utility-EZ Mode是一种简单易用的BIOS设置界面,它提供了基本的系统信息、启动选项、调整CPU和内存频率、设置风扇控制等功能。它的设计使得用户可以轻松地进行基本的BIOS设置,而不需要深入了解BIOS的复杂性。 ### 回答2: UEFI BIOS Utility - EZ Mode是一种UEFI BIOS配置工具,它旨在使用户可以轻松管理和调整基本系统设置。EZ Mode提供了一个简化的图形用户界面面板,使用户能够快速而准确地调整各种BIOS选项。 EZ Mode界面以图形化方式呈现各种设置和参数,这使得用户可以更轻松地了解它们的含义和作用。例如,在EZ Mode中,用户可以快速地查看CPU速度、内存用量、系统温度、风扇转速等参数,并进行必要的调整以改善系统的性能和稳定性。 除了常规的设置,EZ Mode还提供了一些高级功能。例如,用户可以选择开启或关闭诸如Intel快速启动技术、USB 3.0支持、SATA控制器等功能,以最大程度地优化系统性能。 此外,EZ Mode还支持自动检测并更新BIOS固件,这可以保证系统始终运行在最新的稳定版本中。 总之,UEFI BIOS Utility - EZ Mode 是一个非常有用和功能强大的BIOS配置工具,它使用户在处理系统设置和参数时更加轻松。无论是普通用户还是高级用户,都可以从EZ Mode的功能中受益。 ### 回答3: UEFI BIOS Utility是现代计算机使用的一种新型Firmware。UEFI位于操作系统和硬件之间,主要负责计算机启动过程中的硬件自检以及操作系统的加载过程。UEFI BIOS Utility的EZ模式是一种简化操作的模式,旨在提供用户一个更加直观的界面,以便用户轻松地对计算机进行配置。 UEFI BIOS Utility的EZ模式提供了一个清晰的界面,可以让用户更加直观地了解计算机的硬件配置,系统信息以及启动选项等。在这种模式下,用户可以很方便地进行一些常见的设置,例如修改系统时间,设置启动顺序等等。同时,EZ模式还提供了导航面板,让用户轻松地找到需要的选项。 一些重要的系统配置也可以在EZ模式下进行调整。例如,用户可以配置CPU的频率和电压,设置内存检测参数等等。此外,用户还可以对硬盘进行分区,修改RAID设置和SATA模式等。 总之,UEFI BIOS Utility的EZ模式提供了一个真正的易用界面,让用户轻松处理大量的系统配置和硬件设置。当您需要进行系统调整的时候,把您的注意力放在EZ模式中,就不需要担心在BIOS中迷路了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值