设为首页 加入收藏

TOP

Android在标准Linux基础上对休眠唤醒的实现
2014-11-24 14:32:31 来源: 作者: 【 】 浏览:0
Tags:Android 标准 Linux 基础 休眠 唤醒 实现

一、新增特性介绍


Early suspend - 这个机制定义了在suspend的早期,关闭显示屏的时候,一些和显示屏相关的设备,比如背光、重力感应器和触摸屏等设备都应该被关掉,但是此时系统可能还有持有wake lock的任务在运行,如音乐播放,电话,或者扫描sd卡上的文件等,这个时候整个系统还不能进入真正睡眠,直到所有的wake lock都没释放。在嵌入式设备中,悲观是一个很大的电源消耗,所有android加入了这种机制。


Late resume - 这个机制定义了在resume的后期,也就是唤醒源已经将处理器唤醒,标准linux的唤醒流程已经走完了,在android上层系统识别出这个物理上的唤醒源是上层定义的,那么上层将会发出late resume的命令给下层,这个时候将会调用相关设备注册的late resume回调函数。


Wake lock - wakelock在android的电源管理系统中扮演一个核心的角色,wakelock是一种锁的机制, 只要有task拿着这个锁, 系统就无法进入休眠, 可以被用户态进程和内核线程获得。这个锁可以是有超时的或者是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动标准linux的那套休眠机制机制来进入休眠。


二、kernel层源码解析 - early suspend 和 late resume实现


相关源码:


kernel/kernel/power/main.c


kernel/kernel/power/earlysuspend.c


kernel/kernel/power/wakelock.c


kernel/kernel/power/userwakelock.c


kernel/kernel/power/suspend.c


之前标准的linux的sysfs的接口只需要一个state就够了,现在至少需要3个接口文件:state、wake_lock、wake_unlock。现在为了配合android为休眠唤醒添加的几种新特性,可以填入文件state的模式又多了一种:on, 标准android系统中只支持state的on和mem模式,其余的暂不支持。wake_lock和wake_unlock接口对应的读写函数在文件userwakelock.c中,对wakelock.c中的create wakelock或者release wakelock进行了封装,供用户空间来使用。


如果上层用户执行:echo xxx(on or mem) > sys/power/state的话,将会调用到如下函数:


在系统suspend的时候提交的两个工作项会陆续被执行到,那么下面就来看一下执行early suspend的关键函数。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OK6410开发板Linux内核移植 下一篇关于Android真机测试(Linux系统下)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: