acpi 学习笔记(2)

2019-08-30 19:23

u8 checksum; /* To make sum of entire table == 0 */ char oem_id[ACPI_OEM_ID_SIZE]; /* ASCII OEM identification */

char oem_table_id[ACPI_OEM_TABLE_ID_SIZE]; /* ASCII OEM table identification */

u32 oem_revision; /* OEM revision number */

char asl_compiler_id[ACPI_NAME_SIZE]; /* ASCII ASL compiler vendor ID */ u32 asl_compiler_revision; /* ASL compiler version */ };

3, (RSDT/XSDT之外的) ACPI描述表数组的第一个:FADT

这个数组的第一个元素由XSDT中的table_offset_entry[0]指定位置。

被指向的第一个表通常是FADT(Fixed ACPI Description Table),它的几个主要作用:

1) 保存着FACS和DSDT表的地址(64位也是)

2) 包含一些entries,每个entry有固定的length,描述一个硬件的ACPI feature(我的理解就是,

硬件对ACPI的支持程度)

Linux下FADT的定义见struct acpi_table_fadt结构。

4. DSDT表(Differentiated System Description Table)

由FADT中的字段指向,见上一条笔记。

//Thanks for wheelz!

DSDT表包含一个Definition Block,叫作'Differentiated Definition Block for the DSDT',它包含了

实现与配置信息(implementation and configuration information)。 OSPM用这些信息来实现:电源管理,

热量管理,以及(在ACPI硬件寄存器所描述的信息之外的)即插即用。

//FIXME: 奇怪的是,Linux没有提供一个struct acpi_table_dsdt 结构的定义,只提供了一个` acpi_system_read_dsdt()函数。

//FIXED: 注意,这个acpi_system_read_dsdt()函数不是内核用来load DSDT表的,而 是为了让用户程序(例如cp)通过/proc/acpi/dsdt来读取DSDT表的(in AML format),以便给内核开发者诊断 问题。

很多platform vendor提供的BIOS,特别是笔记本上,其DSDT表往往有BUG,导致Linux的电源管理出现问题。

Linux内核提供了CONFIG_ACPI_CUSTOM_DSDT和CONFIG_ACPI_CUSTOM_DSDT_FILE配置选项,允许用户自己提供

DSDT文件,替代BIOS中有BUG的那个。

这个用户自己提供的DSDT文件,其实就是一个AML语言描述的数据块。 可以用pmtools中的acpidump和

acpixtract程序把ACPI的表从BIOS中提取出来,再用iasl工具(Intel ACPICA中的ASL编译器、

AML反汇编器)

反汇编它,修正BUG,然后编译。

这个原理,参考Linux内核的acpi_os_table_override()函数。

5. SSDT表

它是DSDT表的扩展。如果有这个表,RSDT/XSDT中就有指向它的指针。 SSDT表可能有不止一个。 Definition Blocks, 都是定义在DSDT或者SSDT(s)表里的。其它的表没有 定义块。

6, FACS表(Firmware ACPI Control Structure)

跟DSDT表一样,FACS表也由FADT表中的字段指向。见笔记<3>。

7, CPU的Idle States (C-states)

从C0到C。一般来说,都是共有从C0到C4这5个状态。 C0是正常状态,即CPU全频率工作,不省电。

n越大,CPU越省电,但从它转到C0的所需时间也越长。

Linux下,可以通过kernel parameter: processor.max_cstate来改变的上限。

8, CPU的Performance States (P-States), CPU频率管理

从P0到P。 P0时,CPU以最高主频工作;其他状态下,n越大,CPU频率越低。

注意,只有C-State处于C0状态时,这些P-States才是有意义的。 如果CPU处于C状态(n>0),调整它的

频率没有任何意义。

9, CPU的Throttling States (T-States)

Throttling是个什么意思呢?--CPU每秒多少个时钟周期s,我们称之为Cycles Per Seconds (CPS)。可以让

CPU在一个CPS中有一定比例的空闲时间。

T-States从T0到T。 当处于T0态时,CPU没有空闲周期;其他状态则n越大,CPU在1秒钟内的空闲周期数 越多。

除了T0外的T-States,和“7, CPU的Performance States (P-States), CPU频率管理”不同,后者只是\让每

秒的周期数少一些\; 它也和CPU的空闲状态(例如C1状态)不同,后者是CPU在1秒钟里所有的周期都是空闲的。

Throttling不会降低电压,它只是让每秒钟都有几个时钟周期是空闲的。--注意,给定一个工作量, Throttling会导致CPU需要更长的时间来完成它,从而耗费更多的电。(电压不变,时间加长,自然耗电变多)

10. CPU的\

in ACPI there are 6 power state:

S0, S1, S2, S3, S4, and S5.

S0 : The Running state.

S1 : the suspend state. in this state, the CPU will suspend activity but remains its contexts.

S2 & S3 : sleep states. in these states,memory contexts are held but CPU contexts are lost.

the difference between S2 and S3 are in CPU re-initialization done by firmware and device reinitialization.

S4 : a sleep state in which contexts are saved to disk. the context will be restored


acpi 学习笔记(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:脉脉 从中国社会实际出发的典型案例

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: