转载自 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,所以上面那一段听起来好绕的逻辑就这么区区几行代码解释了。

linux syscore suspend/resume方法相关推荐

  1. Linux Kernel suspend/resume 过程

    Linux Kernel suspend/resume 过程 休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休 ...

  2. java 线程resume_为什么java线程不推荐调用stop,suspend,resume方法

    标签: 一.stop stop方法不推荐调用,官方说发是"可能发生不可预测的问题".其实线程在调用stop方法后,会停止自己.线程停止的时候,会直接停止执行,并释放自己正在使用的锁 ...

  3. Linux下USB suspend/resume源码分析【转】

    转自:http://blog.csdn.net/aaronychen/article/details/3928479 Linux下USB suspend/resume源码分析 Author:aaron ...

  4. java thread suspend_关于Thread对象的suspend,resume,stop方法

    一.作用 对于老式得磁带录音机,上面都会有,暂停,继续,停止.Thread中suspend,resume,stop方法就类似. suspend,使线程暂停,但是不会释放类似锁这样的资源. resume ...

  5. 【Android】 android suspend/resume总结(2)

    上文中提到Android系统通过将 mem 写入 /sys/power/state 来发起系统挂起.这篇文章大部分内容来自蜗窝科技,我更新了code以及增加自己的理解 Suspend功能有关的代码分布 ...

  6. 【Android】 android suspend/resume总结(1)

    芯片(SoC)上系统的电源状态有:on.idle和suspend.On表示SoC正在运行.Idle是一种中等功率模式,在这种模式下,SoC是通电的,但不执行任何任务.Suspend是一种低功耗模式,其 ...

  7. (转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()

    为了解决对共享存储区的访问冲突,Java 引入了同步机制.但显然不够,因为在任意时刻所要求的资源不一定已经准备好了被访问,反过来,同一时刻准备好了的资源也可能不止一个. 为解决访问控制问题,Java ...

  8. suspend/resume、wait/notify、park/unpark

    前言 "等待/唤醒"机制是java实现线程通信的方式之一,最常见的实现便是wait/notify.但是对于等待/唤醒机制,JDK实际上提供了多种实现方式,但是也废弃了一些,本篇主要 ...

  9. 西农新版锐捷linux系统客户端联网方法

    作者: 星星之光    时间: 2009-4-12 23:54      标题: 西农新版 锐捷linux系统 客户端联网方法 本帖最后由 星星之光 于 2009-4-25 01:03 编辑 经本人与 ...

最新文章

  1. ★核心关注点_《信息系统项目管理师考试考点分析与真题详解》
  2. 全了!从Python入门到精通
  3. 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
  4. Mac系统下Homebrew的安装和使用Homebrew安装python
  5. win7系统去除图标箭头的方法
  6. asp.net EF+MVC2实战2
  7. java中使用rmi进行远程方法调用
  8. pip 安装mmcv
  9. spring + hibernate + 实体类 注解配置代码
  10. 栈和队列之栈的定义和实现
  11. 1.MongoDB入门详解
  12. Java面试题之 static执行顺序
  13. mysql dump hbase_导入mysqldump表结构
  14. python爬取其他人微信朋友圈_python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈...
  15. shell 追加指定内容至某文件
  16. sem_wait和sem_post
  17. iPhone电池健康度是什么
  18. 【单片机毕业设计】【mcuclub-304】智能保温杯 | 语音智能水杯 | 恒温杯 | 多功能水杯
  19. 怎样娶到比尔盖茨的女儿?
  20. lect02_codes02_pandas

热门文章

  1. Visio 的uml数据库表示方法中容器无法设置外键?
  2. 【一览表】macOS代号\macOS版本\苹果电脑各型号对应的macOS版本列表
  3. csv文件打开波形,SPICE Explorer 2007.1 软件使用
  4. 记录错误:ImportError: No module named ‘tools‘。jupyter无法import第三方文件夹的库
  5. 【游戏】2048及各种变种大集合汇总【更新ing~新版Floppy2048 - 恒星聚变版 - 恶搞改数据】...
  6. 怎么写好文案?这些工具很好用
  7. C/C++常用的文件函数注释格式
  8. VLOOKUP函数的多条件引用
  9. SQL数据库管理—DBCC数据库修复
  10. 隐藏的区别:display:none 和visibility:hidden