Android wakelock

Android wakelock机制是为了防止系统进入suspend或其他低功耗状态,那么首先来看driver API。

那么在driver中需要include一个头文件<linux/wakelock.h>,例如:
struct state {
	struct wakelock wakelock;
};

init () {
	wake_lock_init(&state->wakelock, WAKE_LOCK_SUSPEND, "wakelockname");
}

初始化一个wakelock需要指定锁的类型,目前有两种类型:WAKE_LOCK_IDLE和WAKE_LOCK_SUSPEND,idle类型锁表示阻止系统进入idle状态(低功耗状态),而suspend类型锁则阻止系统进入suspend状态,用的最多的可能是suspend类型锁。

uninit() {
	wake_lock_destory(&state->wakelock);
}

加锁使用wake_lock:
	wake_lock(&state->wakelock);

释放锁使用wake_unlock:
	wake_unlock(&state->wakelock);

加锁当然也可以使用wake_lock_timeout,超过一定时间后自动释放:
	wake_lock_timeout(&state->wakelock, HZ);

从这里可以看出wakelock相关API是相对比较简单的。

同样在用户空间我们也可以创建是释放wakelock,创建一个wakelock只需要向/sys/power/wake_lock写一个锁的名字就可以了,而释放锁则向/sys/power/wake_unlock写入锁的名字。

注意:用户空间创建的锁都是suspend类型的锁。

在用户空间,还可以通过cat /proc/wakelocks命令来查看系统中的wakelock。

// 2016-06-13 add
注:在3.4或更高版本的内核中,需要使用命令cat /sys/kernel/debug/wakeup_sources


参考自:http://elinux.org/Android_Power_Management

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值