Linux省电相关idle和suspend

suspend流程借用其他图和链接,比较详细了http://www.wowotech.net/linux_kenrel/suspend_and_resume.html

我这边记录下wakelock的相关接口和suspend过程中的frozenthread实现原理,还有部分idle流程。

wakelock内核和应用使用的相关接口
static inline void wake_lock(struct wake_lock *lock)
{
	__pm_stay_awake(&lock->ws);
}

static inline void wake_lock_timeout(struct wake_lock *lock, long timeout)
{
	__pm_wakeup_event(&lock->ws, jiffies_to_msecs(timeout));
}

static inline void wake_unlock(struct wake_lock *lock)
{
	__pm_relax(&lock->ws);
}
wakelock通过一个32位值来表示,高16位表示总的wakeevent发生次数,低16位标志当前置位的wakelock数量
没有wakelock时候触发suspend流程

wakeup.c可以看wakelock当前状态,是debug接口

在kernel\power\main.c封装着给应用层使用的接口,应用通过写文件来设置wakelock,/sys/power/wake_lock|wake_unlock
#ifdef CONFIG_PM_WAKELOCKS
static ssize_t wake_lock_show(struct kobject *kobj,
                  struct kobj_attribute *attr,
           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值