基于Android的Linux内核的电源管理:概述(3)

3.  Android的电源锁机制:wake lock

Android相比标准的Linux内核,在电源管理中加入了wake lock机制。一旦申请了某种类型的锁,电源管理模块将会“锁住”某一种电源状态,目前,Android提供了两种类型的锁:

WAKE_LOCK_SUSPEND  --  阻止系统进入suspend状态;

WAKE_LOCK_IDLE  --  阻止系统进入idle状态;

wake lock也可以设定超时,时间一到,自动释放该锁。

有关wake lock的代码在:kernel/power/wakelock.c中。

4.  电源状态迁移

内核启动完成以后,电源管理系统会在sysfs文件系统中建立3个文件:

/sys/power/state

/sys/power/wake_lock

/sys/power/wake_unlock

电源状态的迁移首先由用户空间的应用程序发起,当系统应用检测到一定时间内没有用户活动后(例如触摸屏、按键),可以向/sys/power/state文件写入相应的电源状态名称(请参考第一节内容),如果写入“mem”,将会触发内核启动suspend的流程,内核将会按照图2.1进行状态的迁移。应用程序也可以通过/sys/power/wake_lock申请一个WAKE_LOCK_SUSPEND 类型的锁,相应地,通过/sys/power/wake_unlock则可以释放一个锁。内核在进入suspend之前如果检测到某个锁没有释放,则会放弃本次的suspend过程,知道这个锁释放为止。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjdyy.html