社区
Linux_Kernel
帖子详情
真心请教Linux kernel进入Suspend问题
唐勉的技术博客
2011-11-10 08:11:12
我想在linux kernel进入suspend之前,应用程序可以做点事情,不知道是否可行?
目前想了一个方法,linux kernel进入suspend之前,好像会有PM_SUSPEND_PREPARE事件,是否可以在这里给上层应用发个消息,然后等待上层应用回复后,再继续执行?
请大家指点,谢谢!
...全文
372
8
打赏
收藏
真心请教Linux kernel进入Suspend问题
我想在linux kernel进入suspend之前,应用程序可以做点事情,不知道是否可行? 目前想了一个方法,linux kernel进入suspend之前,好像会有PM_SUSPEND_PREPARE事件,是否可以在这里给上层应用发个消息,然后等待上层应用回复后,再继续执行? 请大家指点,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
唐勉的技术博客
2011-11-12
打赏
举报
回复
现在WinCE搞得少,Linux搞得多了。顺便说一句,问题已解决,通过向pm_notifier注册函数并响应PM_SUSPEND_PREPARE事件来实现。
lvyinghong
2011-11-11
打赏
举报
回复
看代码内核驱动收到PM_SUSPEND_PREPARE 通知的时候用户进程还没被挂起的。
也许真的是可以在这里个用户进程发信号,等待用户进程把事情,再继续,这通知处理里面是可以block住的,也就是说可以等待用户应用。可以试一下
deep_pro
2011-11-11
打赏
举报
回复
在纯linux,以2.6.36为例,每当linux要进入suspend,会执行
suspend_prepare()->pm_notifier_call_chain(PM_SUSPEND_PREPARE);
这个pm_notifier_call_chain属于内核自定义的内核通知链。所有需要支持SUSPEND的驱动,都会用register_pm_notifier把自己注册到这条通知连上。
这样pm_notifier_call_chain就能把PM_SUSPEND_PREPARE事件通知到每一个驱动。
但是我在pm_notifier_call_chain里没有找到对应用程序有什么统一的通知。所以我觉得你要在suspend_prepare()里对某一个进程发自定义的通知是很容易的,但不能对所有进程都发通知,我想linux本生没有这样的机制。
android对电源管理作了较多修改,这个我不知道。
Wenxy1
2011-11-11
打赏
举报
回复
发送一个信号给应用即可。
需要注意,所有的硬件是否支持suspend和resume。
唐勉的技术博客
2011-11-11
打赏
举报
回复
非常感谢楼上两位的回复,这个功能希望在Linux和Android上面都能支持。内核在suspend之前,好像还会做一些事情,不知道是否由接口留给上层,内核代码是可以修改的。不知道还有其他建议么?
jiahehao
2011-11-11
打赏
举报
回复
可是,我觉得只有线程有suspend,内核是不会suspend的呀。如果你在线程suspend前通知一下用户空间的程序,倒是很容易的。
xqhrs232
2011-11-11
打赏
举报
回复
[Quote=引用楼主 nanjianhui 的回复:]
我想在linux kernel进入suspend之前,应用程序可以做点事情,不知道是否可行?
目前想了一个方法,linux kernel进入suspend之前,好像会有PM_SUSPEND_PREPARE事件,是否可以在这里给上层应用发个消息,然后等待上层应用回复后,再继续执行?
请大家指点,谢谢!
[/Quote]
现在没搞WINCE?怎么去搞LINUX去了?
deep_pro
2011-11-10
打赏
举报
回复
请先明确下是纯linux还是android的哪个版本
如果允许该内核代码的话,这样的功能小意思了
深入探讨
Linux
Kernel
suspend
/resume 过程的实现原理和相关技术
接下来,
suspend
_enter()会被调用, 这个函数会关闭arch irq, 调用 device_power_down(), 它会调用
suspend
_late()函数, 这个函数是系统真正
进入
休眠最后调用的函数, 通常会在这个函数中作最后的检查. 如果检查没
问题
, 接 下来休眠所有的系统设备和总线, 并且调用
suspend
_pos->enter() 来使CPU
进入
省电状态. 这时候,就已经休眠了.代码的执行也就停在这里了。到这里, 所有的休眠和唤醒就已经完毕了, 系统继续运行了.
Linux
Kernel
suspend
/resume 过程
Linux
Kernel
suspend
/resume 过程 休眠/唤醒在嵌入式
Linux
中是非常重要的部分,嵌入式设备尽可能的
进入
休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下
Linux
中休眠/唤醒是如何工作 的 参考文章:作者: zhangjiejing Date: 2010-04-07, http://www.thinksrc.com 我的
linux
内核版本:3.0.31
Linux
Kernel
suspend
and resume
转自:http://blog.csdn.net/myarrow/article/details/8136109,并在此基础上添加一些注释 一、对于休眠(
suspend
)的简单介绍 在
Linux
中,休眠主要分三个主要的步骤: 1) 冻结用户态进程和内核态任务 2) 调用注册的设备的
suspend
的回调函数, 顺序是按照注册顺序 3) 休眠核心设备和使CPU
进入
休
kernel
的
suspend
状态
看一些文档,总是发现支持的
suspend
状态不一致,回过头去把旧版本的
kernel
文档看了一下,发现是有发展脉络的 /Documentation/power/states.txt 该文档在4x之后没有了, 取而代之的是interface.txt 2.6.37 3.18 4.19
Suspend
-To-Idle/S0/"freeze" Standby Power-On
Suspend
/S1/"Standby" Standby Powe.
关于S3学习所涉及到的知识(二):
Linux
设备驱动
suspend
/resume的顺序
前面我们知道syscore ops的回调是关中断,关非boot cpu的情况下调用的。
suspend
/shutdown回调注册的越早越靠后调用,resume回调注册的越早越靠前调用。syscore的
suspend
回调是在所有驱动的
suspend
回调之后被调用,syscore的resume回调在所有驱动的resume回调之前被调用
Linux
在
进入
suspend
的时候,会首先freeze userspace,然后挨个去调用设备驱动程序的
suspend
,最后调用architecture dependent的cal
Linux_Kernel
4,465
社区成员
17,462
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章