第二十三篇:Windows中的ACPI

一直不太清楚ACPI驱动在WINDOWS中的作用.

甚至不了解ACPI协议的作用.

于是, 随便翻了下"格蠹汇编"中的第24章, 如何跟踪ACPI代码, 算是对ACPI有了一个初步性的了解.

ACPI向OS报告硬件信息, 而OS通过ACPI控制硬件.

ACPI就是OS与硬件/固件之间的一个标准接口协议.

ACPI通过ASL(ACPI SOURCE LANGUAGE)来描述系统硬件的属性与方法, ASL最终会被编译为AML(ACPI MACHINE LANGUAGE)的字节码(BYTECODE).

之后, 翻阅了一下WDK中关于ACPI的内容:

ACPI设备包括:

low-level system devices such as batteries, thermal zones, and other devices defined in a system‘sACPI namespace.

ACPI设备在WINDOWS驱动中的表现形式:

即definition block和它其中的一块operation region.

An ACPI device is specified by a definition block in the ACPI System Description Tables. A device‘s definition block specifies, among other things, anoperation region, which specifies a contiguous block of device memory that is used to
access device data.

ACPI设备的Windows软件构成:

1. ACPI系统驱动ACPI.SYS

2. vendor提供的WDM驱动

3. ACPI BIOS, 就是所谓的固件

这一组合的操作流程是:ACPI.SYS调用vendor提供的WDM驱动中的operation region handler来访问operation region, 以达到对ACPI设备数据/控制的目的.

关于设备堆栈:

分为该APCI设备是主板集成的, 则ACPI驱动建立FDO, 位于WDM驱动建立的FDO之下, 位于ROOT BUS驱动建立的PDO之上

如果不是主板集成的, 则ACPI为该设备建立PDO, 位于WDM建立的FDO之下.

ACPI的控制方法:

所谓的ACPI控制方法, 就是由ASL/AML描述的用来查询与配置硬件的软件.

由ACPI驱动负责解释执行.

Control methods are written in the ACPI Machine Language (AML), loaded from the system firmware into the ACPI namespace, and interpreted by the ACPI driver.

ACPI的命名规则:

\ root of ACPI namespace

ABCD parent device (缩进一次)

CHL1 child device of ABCD (缩进二次)

CHL2 child device of ABCD (缩进二次)

CHL3 child device of CHL2 (缩进三次)

_FOO control method (缩进三次)

_FOO control method (缩进一次)

WINDOWS对ACPI设备的命名由对象来表述(object), 一个对象可以包括子对象, 而对象既可以是子设备(child device), 也可以是控制方法(control method).

第二十三篇:Windows中的ACPI

时间: 2024-10-07 05:26:40

第二十三篇:Windows中的ACPI的相关文章

Egret入门学习日记 --- 第二十三篇(书中 9.9~9.11 节 内容)

第二十三篇(书中 9.9~9.11 节 内容) 今天,来9.9节. 重点: 1.VSlider的声明和使用. 操作: 1.VSlider的声明和使用. 其实和HSlider的使用方式差不多. 至此,9.9节 内容结束. 开始 9.10节. 重点: 1.配合TextureMerger,生成艺术字图集资源. 2.导入艺术字资源,并使用. 3.调整艺术字间距. 操作: 1.配合TextureMerger,生成艺术字图集资源. 打开TextureMerger,选择Bitmap Font . 点击添加字符

第二十三篇 责任与义务

第二十三篇  责任与义务 我们来到这个世界,本身就有自身的责任与义务.如果没有责任与义务,我们就失去了生活的意义,因为一个人必须活出价值才有意义:没有价值地活着,那就成为了宇宙的累赘.以这样的方式来为亲人们讲解我们的"责任与义务"非常有必要.如果一个人活在这个世界上都不明白自己的责任与义务是什么,那就会失去方向.这一篇我就为亲人们简单地讲解我们在这个宇宙中的责任与义务. 人类作为高智慧物种,如果没有责任与义务也就不会出现在宇宙中.因为创造者在创造我们人类这个物种的时候就给到了定位:也是

第二十七篇:Windows驱动中的PCI, DMA, ISR, DPC, ScatterGater, MapRegsiter, CommonBuffer, ConfigSpace

近期有些人问我PCI设备驱动的问题, 和他们交流过后, 我建议他们先看一看<<The Windows NT Device Driver Book>>这本书, 个人感觉, 这本书写得很连贯流畅. PCI设备驱动基本包含了PCI的资源获取, 配置空间的读写, 中断的处理, 中断后半部在DPC中的处理. 同一时候, 也必须了解DMA, ScatterGater, MapRegister, Common Buffer等基础. 1.1 PCI设备资源获取 PCI设备的资源是系统依据设备的属性

第二十三篇:在SOUI中使用LUA脚本开发界面

像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑.当需求变化时,只需要在服务端把相关代码调整一下,用户即可看到新的内容(界面). 传统的客户端程序开发流程和网页开发可能完全不同. 首先是界面的布局,在老式的界面布局过程中,程序员先在界面上放好各种控件,然后需要自己通过相应的代码来维护界面在不同状态下控件的显示状态及位置.当界面中元素很多时,单纯布局

第二十三篇 Java如何编译 计算器 的源代码共享

大家好,今天放了一天的假,无聊的我简单的敲了一下计算器的源代码,发现以前的东西都忘的差不多了,所以趁现在还有点记忆,先试着敲回以前的感觉.... 好了,废话不多说,先看原码: 先创建一个主类: public class Test{ public static void main(String[ ] args){ Calculator calc=new Calculator(); calc.PaintingFrameUi(); } } 在新建几个监听器: 第一个: import javax.swi

第二十三篇:信号机制的两个思考

前言 前文介绍了最基本的信号接收和处理,但这有无可能带来一些问题呢? 本文将通过两个思考,来分析可能带来的问题以及解决方法. 思考一:中断的系统调用 如果用户正在执行系统调用,如 write read.如果这个时候程序跳转到了信号处理函数后返回,则是否重新执行这个系统调用? 结论 这要分情况讨论:如果是磁盘 I/O 的系统调用,则自然需要自动重启:而如果是终端 I/O,则不需要自动重启. 在信号函数族中,有很多函数都是支持设置是否重启选项的.当然,用户也可以使用类似下面的代码自行实现重启: 思考

第二十三篇 jQuery 学习5 添加元素

jQuery 学习5 添加元素 同学们,这节课,使用jQuery动态添加元素,是很关键的一课,一般用在什么地方呢:别人发表一篇文章,你评论楼主的时候,总不能是提交表单,到后台的其他页面处理,然后再刷新回来吧,这样的话,用户体验不好.考虑一下用户的计算机配置不好.网络不好等多个因素,总是刷新页面,会造成等待的时间太长.甚至有的浏览器直接刷新不出来了,那么用户就抓狂了,就对你的产品有怨言. 所以,我们做前端,要实现动态添加,以后再使用ajax这类异步刷新和后台交互就可以了,那么多的不说,我们现在学的

【Python之路】第二十三篇--Django【进阶篇】

文件配置 1.模版Templates文件配置: TEMPLATE_DIRS = ( os.path.join(BASE_DIR,'templates'), ) 2.静态文件static配置: STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), ) Q搜索示例 1.利用Q的特性,设计多条件搜索. con = Q() q1 = Q() q1.connector = 'OR' q1.children.append(('id', 1)) q1.ch

python全栈开发基础【第二十三篇】线程

一.什么是线程 线程:顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 所以,进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位. 多线程(即多个控制线程)的概念是,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内有多条流水线,都共用一个车间的资源.(一个进程里面开多个线程(共享同一个进程里面的内存空间)) 例如,北京地铁与上海地铁是不同的进程,而北京地铁里的13号线是一个