免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2788 | 回复: 6
打印 上一主题 下一主题

请教,如何实现linux驱动里响应系统poweroff信息。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-26 20:59 |只看该作者 |倒序浏览
我现在有个驱动程序,例如叫example.c,编译后是ex.ko。现在我想在这个驱动程序里处理当系统发生关机(poweroff)的事件,我该如何设计,这个关机事件,有可能是用户敲的命令。

我该如何在我这个驱动程序里捕获这个poweroff事件,然后进行相应的处理,然后关机呢????


谢谢。请大家提供个思路或者方法,有小例子更好。

论坛徽章:
0
2 [报告]
发表于 2012-04-27 14:55 |只看该作者
我顶。

论坛徽章:
0
3 [报告]
发表于 2012-04-27 22:31 |只看该作者
帮顶。
会不会和电源管理部分有关,我瞎猜的。

论坛徽章:
0
4 [报告]
发表于 2012-04-28 09:29 |只看该作者
看看内核通知链关机部分,关机部分应该有“关机通知链”,有的话只要在你自己的模块中用链注册函数注册到这个链中就OK了

论坛徽章:
0
5 [报告]
发表于 2012-04-28 09:37 |只看该作者
刚才看了看源码,在power.c中power_exit()时那个通知链就是你需要注册进去的

论坛徽章:
0
6 [报告]
发表于 2012-05-03 15:09 |只看该作者
注册通知事件,linux支持的通知事件有以下几种(include/linux/notifier.h):
#define SYS_DOWN        0x0001        /* Notify of system down */
#define SYS_RESTART        SYS_DOWN
#define SYS_HALT        0x0002        /* Notify of system halt */
#define SYS_POWER_OFF        0x0003        /* Notify of system power off */

下面给你个参考代码:
static int example_notifier_call(struct notifier_block *this, unsigned long code, void *_cmd)
{
        int mode = 0;

        if (code == SYS_RESTART)
               {
                    ... ...
               }

        else if (code == SYS_POWER_OFF)
                {
                    ... ...
               }

        return NOTIFY_DONE;
}

static struct notifier_block example_reboot_notifier = {
        .notifier_call = example_notifier_call,
};

论坛徽章:
0
7 [报告]
发表于 2012-05-03 15:10 |只看该作者
下面的函数用于注册通知
/* register rnotifier*/
register_reboot_notifier(&example_reboot_notifier);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP