wake_lock_init函数的定义如下: ``` void wake_lock_init(struct wake_lock *wl, enum wake_lock_t lock_type, const char *name); ``` 参数说明: - wl:唤醒锁结构体的指针 - lock_type:唤醒锁类型,有三种类型可选:WAKE_LOCK_SUSPEND、WAKE_LOCK_SUSPEND_TO_DVFS、WAKE_LOCK_SUSPEND_TO_IDLE - name...
初始化(一般放在probe或者register函数里): wake_lock_init(&wlock, WAKE_LOCK_SUSPEND, "wlock name"); 1. 判断是否已加锁,释放锁 if (wake_lock_active(&pon->wlock)) { wake_unlock(&pon->wlock); } 1. 2. 3. 判断是否已加锁,加锁 if (!wake_lock_active(&pon->wlock)) { wake_lock(&pon...
wake_unlock(&main_wake_lock);//这里很重要,别小看这个一个wake_unlock,起初我也以为这仅仅是一个释放main锁,其实里面有玄机呢。还记得wake_lock主要用来干嘛么,用来防止系统休眠,也就是说,只要系统中其他地方还拥有wake_lock锁(类型WAKE_LOCK_SUSPEND),系统就没法进入休眠,如果没有锁了,那就要接着走标准Linux...
voidwake_lock_init(structwake_lock *lock,inttype,constchar*name);voidwake_lock_destroy(structwake_lock *lock);voidwake_lock(structwake_lock *lock);voidwake_lock_timeout(structwake_lock *lock,longtimeout);voidwake_unlock(structwake_lock *lock); 其中wake_lock_init()用于初始化一个新锁,type...
void wake_lock_init(struct wake_lock *lock, int type, const char *name); void wake_lock_destroy(struct wake_lock *lock); void wake_lock(struct wake_lock *lock); void wake_lock_timeout(struct wake_lock *lock, long timeout); void wake_unlock(struct wake_lock *lock); 其中wake_lock_...
wakelocks_init()函数所做的工作是整个wakelock可以工作起来的基础,所有这里先说说这个函数。staticint__initwakelocks_init(void){ intret;inti;for(i=0;i<ARRAY_SIZE(active_wake_locks);i++)INIT_LIST_HEAD(&active_wake_locks[i]);//初始化active_wake_locks数组中的两个类型锁链表:WAKE_LOCK_SUSPEND,...
consoleearlysuspend.c wakelock.c userwakelock.c 及相应的头文件: include/linux/wakelock.h 接着主要关注wakelock的实现:1.主要的数据结构 wakelock的两种状态, 前者表示还不能suspend,后者表示可以suspe enum { WAKE_LOCK_SUSPEND, /* Prevent suspend */ WAKE_LOCK_IDLE, /* Prevent low power idle */ ...
wake_lock_init(&ec43_wlock, WAKE_LOCK_SUSPEND, “ec43_wakelock”); 3.在须要唤醒处调用: wake_lock_timeout(&ec43_wlock, msecs_to_jiffies(10*1000)); 作用同上。具体不再说明,自己查看 //wake_lock_timeout(&ec43_wlock, 10*HZ);
这里我们使用的是init_waitqueue_head函数,这个函数主要做两件事情, 第一件初始化等待队列头的自旋锁,即使自旋锁设置为未锁状态; 第二件事情初始化等待队列头里面的task_list结构体,使之不指向任何一个等待队列头。所以在这里我们也可以通过此来判断等待队列是否有等待队列项,如果没有等待队列项,task_list链表的nes...
} void __wake_up_common_lock(struct wait_queue_head *wq_head, unsigned int mode, int nr_exclusive, int wake_flags, void *key) { unsigned long flags; wait_queue_entry_t bookmark; bookmark.flags = 0; bookmark.private = NULL; bookmark.func = NULL; INIT_LIST_HEAD(&bookmark.entry)...