UEFI/BIOS

编程入门 行业动态 更新时间:2024-10-08 10:59:36

<a href=https://www.elefans.com/category/jswz/34/1737712.html style=UEFI/BIOS"/>

UEFI/BIOS

文章目录

    • 什么是ACPI
    • APCI系统架构流程
    • ACPI定义的电源状态转化结构图
    • ACPI表
    • 什么是ASL
    • ACPI睡眠状态之S3

什么是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;
elsedsdt = (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博客链接:



.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功能。通过该状态,系统可以在短时间内快速恢复,同时也可以节约较多功耗,实现良好的低功耗特性。

更多推荐

UEFI/BIOS

本文发布于:2024-03-12 10:06:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1731274.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:UEFI   BIOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!