返回列表 发帖

ACPI中ASL的简单介绍(2)

本文是 ASL 系列的第二篇, 第一篇在这里: http://www.biosren.com/viewthrea ... amp;extra=#pid19708

看完了第一篇中关于 ASL的简单介绍之外,现在来看个具体的例子把. (PS: 俺喜欢栗子.) 本人最近对S3, S4 sleep 比较感兴趣,于是找出相应的代码看了下。去哪里找代码?如果你是在公司里干活的开发人员,那么恭喜你,你应该已经有源代码了。如果你是像我一样的外行,那么可以看看 COREBOOT (WWW.COREBOOT.ORG)。 COREBOOT 是一个开源的BIOS。支持的板子不多,比较老,但是开源,免费。。。

目前的COREBOOT也不是所有板子都支持了ACPI,只有一部分支持。我现在看的是 ASUS M2V-MX_SE的这块。在LINUX下,GREP 下他的源文件,就可以发现下面在mainboard/asus/m2v-mx_se/dsdt.asl 里有几行和 SLEEP 有关的定义:

Name (\_S0, Package () { 0x00, 0x00, 0x00, 0x00 })
Name (\_S3, Package () { 0x01, 0x01, 0x00, 0x00 })
Name (\_S5, Package () { 0x02, 0x02, 0x00, 0x00 })

这是什么意思呢?我们来具体看下。本系列的第一篇说了,ASL里面有“一堆”的操作符,一般都在小括号前面。比如上面代码里的Name就是一个操作符。

啰嗦一下,这个ASL里面的操作符看着很奇怪。一般的C语言里,操作符也就是+,-,*,/ 等这么几个。到了 ASL, 这个Name看上去很像一个C函数,但是又没有具体实现的地方。我觉得可以理解成ASL内部实现了的一个函数。。。

好了,言归正传,既然Name是个操作符,那么就是ASL 本身已经定义好的。查下ACPI SPEC 就可以找到他的含义了。如下 (ACPI 4.0 Page 620):

18.5.80
Name (Declare Named Object)

Syntax:
Name (ObjectName, Object)

Arguments:
Creates a new object named ObjectName. Attaches Object to ObjectName in the Global ACPI namespace.

Description:
Creates ObjectName in the namespace, which references the Object.

Example:
The following example creates the name PTTX in the root of the namespace that references a package.

Name (\PTTX, // Port to Port Translate Table
Package () {Package () {0x43, 0x59}, Package) {0x90, 0xFF}}
)

The following example creates the name CNT in the root of the namespace that references an integer data object with the value 5.
Name (\CNT, 5)

简单的说Name就是定义了一个Object和他的名字。可以想象成是一个常量和这个常量的名字。在他的具体定义里,又包括了一个Package的定义。于是用同样的方法查下Package的定义( ACPI SPEC 4.0 PAGE 625).  就知道他的含义了。就是把一堆Object放在一起,类似一个C语言里的结构体。

沙发~
先顶,再慢慢看~
静默

TOP

半年前写过介绍性的入门文章。。
初学者会这点基本就够了。。。
http://feishare.com/acpi/acpi-introduce-to-asl-programming
少壮不努力,老大求代码。。
勤奋,爱学习,有爱

TOP

老大你早说啊。。。:)
完全新手,没有经验. 所有的帖子都是个人意见. 难免不对,见谅,见谅.

☑有房(租的)☑有车(旧的)☑有钱(不到5位数)☑有相貌(普通的)

☑没培训☑没高人☑没代码☑没文档☑没仪器

TOP

返回列表
GForce-200 PLC-GIPENG.COM