如何记录并发现异常唤醒系统的中断源
来源:互联网 发布:室内设计网络培训 编辑:程序博客网 时间:2024/05/16 04:02
无论是android系统还是VxWorks等实时系统,在开发调试过程中经常会存在系统被中断异常唤醒的情形,系统被唤醒有时是正常的唤醒,比如定时器到时来中断唤醒系统来处理业务,有时是异常的唤醒,比如定时器设置超时时间不合理,频繁唤醒系统会导致系统耗电量增加,电池电源很快被耗尽,减短终端待机或者使用时间,此时我们需要一定的手段来记录是谁唤醒的系统,然后分析是否合理唤醒,不合理就让相关责任人修改。那么在android系统中(Linux类似),我们可以在syscore级别的resume 回调注册回调函数来记录中断状态;
为什么选择syscore级别的回调函数呢,主要是syscore级别的suspend和resume回调是完全处于锁中断的,此时系统是不响应中断的,我们可以在此记录中断状态。有人可能会问,为什么不注册dpm里边的suspend_noirq或者resume_noirq级别的回调函数呢?举个例子来讲,在唤醒时,在执行完syscore级别的resume后,在执行dpm的resume_noirq前,系统就已经可以响应中断了,如果注册resume_noirq级别的回调,则在调用回调函数获取中断状态之前系统就已经响应中断并把中断清除掉了,此时是不可能获取到并记录中断状态的。
原理介绍完了,下边我们还是简单看一下使用方法吧。
1、首先,定义自己的回调函数
static void my_resume(void)
{
/*获取中断状态,根据实际需要选择是打印出来还是另作处理*/
}
2、定义自己的注册变量
static syscore_ops my_pm_ops = {
.resume = my_resume,
};
3、在自己的初始化函数中注册syscore ops
static int __init my_init(void){
register_syscore_ops(&my_pm_ops);
return 0;
}
感兴趣的同学可以参考Linux内核syscore_ops.h和syscore.c
- 如何记录并发现异常唤醒系统的中断源
- Linux下 使用 中断唤醒 已经suspend的 系统
- Marvell pxa310/300中断唤醒源的设置
- 关于信号中断与慢系统调用的深度发现
- 处理器如何发现中断信号?
- 【中断异常】系统调用
- 中断、异常、系统调用
- 中断,异常,系统调用
- 中断唤醒
- imx6系列--将一个gpio设置为可唤醒系统的外部中断流程
- 如何设置通过PMU的gpio来唤醒系统
- 如何设置通过PMU的gpio来唤醒系统
- 如何处理被中断的系统调用
- 中断、异常和系统调用
- 中断、异常和系统调用
- 中断、异常和系统调用
- 操作系统 中断异常系统调用
- 中断、异常与系统调用
- ORACLE相关导出导入命令
- 微信自定义菜单 ViewButton绑定openid(Java)
- OCP-1Z0-051 第77题 INITCAP和SUBSTR函数
- Coursera上的machine learning学完啦
- cover
- 如何记录并发现异常唤醒系统的中断源
- VARIANT的使用
- Linux下部署Java应用程序
- 不同浏览器下,创建Java + Selenium工程
- java进制转换器 图形用户界面 十进制及其相反数分别转化为二,四,八,十六进制
- 对当前大学教育的一写看法
- base64编码
- 线程的相关操作
- POJO对象set数据的泛型方法(通用方法)