现在的位置: 首页 > 综合 > 正文

linux APM简析

2013年08月29日 ⁄ 综合 ⁄ 共 1473字 ⁄ 字号 评论关闭

作者:tommy.hong 转载请注明出处

Emailhongjiujing@126.com

BLOGhttp://blog.csdn.net/hongjiujing

主页:http://blog.sina.com.cn/jiujinhong

 

 

linux对电源管理的支持

内核模块

针对APM和ACPI两种不同的标准,linux内核提供了两个不同的模块来实现电源管理功能,这就是apm和acpi。需要注意,apm和acpi是互相冲突的两个模块,用户在同一时间内只能加载其中之一,如果当他们在加载的时候发现二者之一已经加载,就会自动退出。

在官方发布的内核中APM是较为成熟的电源管理方式,可以完成在Windows下ACPI所能完成的大部分功能。由于官方内
核中ACPI的功能比较有限,目前还处于开发版状态。所以当前的大多数distribution,如红帽子默认就使用了apm作为电源管理方式。但是值得
注意的是linux中的ACPI实际上是由一个单独的项目小组模块进行维护的,当前内核ACPI的版本实际上已经远远落后于最新的版本。由于linux稳
定版中对任何新特性的加入都非常谨慎小心,所以我们也许只能等到2.6.x版本的linux诞生后才能看到ACPI的稳定全功能版了。不过我们也可以自己
对内核打最新的ACPI补丁来获得这些功能。

这里是ACPI的主页:
http://sf.net/projects/acpi/

下面对电源管理的介绍以APM为主。

用户态Daemon


了让linux内核中的电源管理功能够更好的被利用,我们还需要用户态daemon程序的配合。针对APM和ACPI,分别有apmd和acpid两个不
同软件。他们实现的功能比较类似,都是允许用户预先定义某些策略,然后跟踪电源状态,执行特定的操作。在apmd软件包中还有一个工具apm,用户可以用
它使机器主动进入standby和suspend状态,还可以查询bios的apm版本号。在使用acpi时直接对proc文件系统进行操作即可完成同样
的功能。

 

/***********************************/

 

         Kernel Space                     

 

APM driver (包括提供给用户空间使用apm_bios_fops System Call,主要有apm_read,apm_poll,apm_ioctl,apm_open,apm_release)。

 

关于电池电量检测,主要要用到MCU平台的ADC采样(每隔多少时间来读取ADC),以及DC供电,电源供电的检测

 

关于体眠和恢复,这个主要是ioctl要完成的事情,例如用户空间用apm -s进行睡眠操作,会调用平台相关的睡眠函数,恢复也是类似的。这里面要注意,APM有一套假睡眠和恢复,需要实现真正平台相关的睡眠和恢复。

具体可以参考我的博客:2410的APM电源管理分析。

 

/***********************************/

 

 

/**********************************/

             User Space

 

GTK/Qt/C ---->open APM_PROC--->System Call (read() mainly) --->Kernel VFS--->apm_driver-->apm_read

 

读取syslog来获得电池电量,供电检测相关的信息

 

/**********************************/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

抱歉!评论已关闭.