linux syscore suspend/resume方法
来源:互联网 发布:抽奖算法提高概率 编辑:程序博客网 时间:2024/05/17 22:54
转载自 http://markzhang.cn
原文链接: http://www.markzhang.cn/blog/2014/04/09/linux-driver-suspend-orders/
syscore是Linux kernel定义的一个framework,我们可以将我们的驱动注册到syscore中去。syscore比较关键的就是syscore_ops这个结构:
struct syscore_ops { struct list_head node; int (*suspend)(void); void (*resume)(void); void (*shutdown)(void);};
可以看到只有 suspend/resume/shutdown 这三个ops,所以看到这里大概也可以猜到了,注册到syscore中的驱动,其suspend函数是在所有其他驱动的suspend都调用过之后调用的,而其resume函数是在所有其他驱动的resume调用之前调用的。简单来说,syscore的驱动,suspend被晚调用保证其他驱动suspend的时候,syscore的驱动还活着;syscore的驱动,resume被很早调用,从而保证其他驱动resume的时候,syscore的驱动已经活着了。好绕。。。
要将驱动注册到syscore中很简单,调用函数:register_syscore_ops(&your_driver_syscore_ops); 就可以了。至于上面说到的syscore的suspend/resume的顺序,实现代码在这里:
error = syscore_suspend();if (!error) { *wakeup = pm_wakeup_pending(); if (!(suspend_test(TEST_CORE) || *wakeup)) { error = suspend_ops->enter(state); events_check_enabled = false; } syscore_resume();}
以上代码来自函数:suspend_enter。可以看到当syscore_suspend被调用之后,就调用architecture dependent的 suspend_ops->enter 了,到这里整个系统就已经停下来了,进入suspend状态了。而当resume开始,suspend_ops->enter 返回之后,第一个被调用的就是 syscore_resume,所以上面那一段听起来好绕的逻辑就这么区区几行代码解释了。
0 0
- linux syscore suspend/resume方法
- linux kernel suspend Resume
- Linux suspend&resume
- 【多线程-Suspend()和Resume()方法】
- Linux Kernel suspend and resume
- linux device suspend/resume test
- Linux Kernel suspend/resume 过程
- suspend/resume
- Chapter 4 suspend和resume方法
- java 线程中suspend,resume方法独占
- 线程之suspend和resume方法
- Linux下USB suspend/resume源码分析
- Linux下USB suspend/resume源码分析
- Linux kernel and Android suspend/resume
- Linux下USB suspend/resume源码分析
- Linux下USB suspend/resume源码分析
- Debug Android and Linux suspend and resume
- Android中Linux suspend/resume流程
- Http post方式发送json数据
- ubuntu 14.04 adt-bundle 无法识别android手机的解决方法
- setTextColor()的参数设置方式
- 【CF】CodeForces 348A Mafia
- Mybatis3使用JdbcOdbc驱动检索MS Access报No data found exception的解决方法
- linux syscore suspend/resume方法
- VC 运行时库 /MD、/MDd 和 /MT、/MTd
- bug修复日记---------玩家信息被重复写入数据库
- hdu_1054 Strategic Game(动态规划与二分图两种解法)
- Unity 动画(UITweener)、协程(Coroutine)和委托(Delegate)队列管理
- 1-1. Interview Guide
- Linux下vsFTP配置全方案(限制用户/端口/速度/空间)
- Gentoo文档翻译——安装Gentoo(2) 硬件要求
- Andriod Splash闪屏