模块API之register_module_notifier
来源:互联网 发布:base64解码软件 编辑:程序博客网 时间:2024/05/29 09:33
int register_module_notifier(struct notifier_block *nb)
函数用于注册需要知道当前模块的状态,然后触发一个回调函数
使用的例子如下:
static __init int jump_label_init_module(void)
{
return register_module_notifier(&jump_label_module_nb);
}
注册的回调函数如下:
static struct notifier_block jump_label_module_nb = {
.notifier_call = jump_label_module_notify,
.priority = 1, /* higher than tracepoints */
};
其源码分享如下:
int register_module_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&module_notify_list, nb);
}
可见就是注册了一个通用的通知链,那在什么时候触发这个通知链呢?
这个通知链定义如下:
static BLOCKING_NOTIFIER_HEAD(module_notify_list);
会出删除模块的时候调用,通知链的参数是MODULE_STATE_GOING
SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
unsigned int, flags)
{
blocking_notifier_call_chain(&module_notify_list,
MODULE_STATE_GOING, mod);
}
会在模块初始化的时候调用通知链,参数是MODULE_STATE_LIVE
static noinline int do_init_module(struct module *mod)
{
/* Now it's a first class citizen! */
mod->state = MODULE_STATE_LIVE;
blocking_notifier_call_chain(&module_notify_list,
MODULE_STATE_LIVE, mod);
}
总而言之,针对模块的每个状态
enum module_state {
MODULE_STATE_LIVE,/* Normal state. */
MODULE_STATE_COMING,/* Full formed, running module_init. */
MODULE_STATE_GOING,/* Going away. */
MODULE_STATE_UNFORMED,/* Still setting it up. */
};
都会发出一次通知链
函数用于注册需要知道当前模块的状态,然后触发一个回调函数
使用的例子如下:
static __init int jump_label_init_module(void)
{
return register_module_notifier(&jump_label_module_nb);
}
注册的回调函数如下:
static struct notifier_block jump_label_module_nb = {
.notifier_call = jump_label_module_notify,
.priority = 1, /* higher than tracepoints */
};
其源码分享如下:
int register_module_notifier(struct notifier_block *nb)
{
return blocking_notifier_chain_register(&module_notify_list, nb);
}
可见就是注册了一个通用的通知链,那在什么时候触发这个通知链呢?
这个通知链定义如下:
static BLOCKING_NOTIFIER_HEAD(module_notify_list);
会出删除模块的时候调用,通知链的参数是MODULE_STATE_GOING
SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
unsigned int, flags)
{
blocking_notifier_call_chain(&module_notify_list,
MODULE_STATE_GOING, mod);
}
会在模块初始化的时候调用通知链,参数是MODULE_STATE_LIVE
static noinline int do_init_module(struct module *mod)
{
/* Now it's a first class citizen! */
mod->state = MODULE_STATE_LIVE;
blocking_notifier_call_chain(&module_notify_list,
MODULE_STATE_LIVE, mod);
}
总而言之,针对模块的每个状态
enum module_state {
MODULE_STATE_LIVE,/* Normal state. */
MODULE_STATE_COMING,/* Full formed, running module_init. */
MODULE_STATE_GOING,/* Going away. */
MODULE_STATE_UNFORMED,/* Still setting it up. */
};
都会发出一次通知链
阅读全文
0 0
- 模块API之register_module_notifier
- 模块API之__module_address
- 模块API之__module_text_address
- 模块API之find_module
- 模块API之module_is_live
- 模块API之module_refcount
- 模块API之try_module_get
- 模块API之module_address_lookup
- 模块API之lookup_module_symbol_name
- 模块API之lookup_module_symbol_attrs
- 模块API之module_get_kallsym
- 模块API之print_modules
- 模块API之ref_module
- 模块API之each_symbol_section
- 模块API之symbol_put_addr
- 模块API之sprint_symbol
- 模块API之print_symbol
- 模块API之module_put/__module_get
- 第一篇博客
- 盘点各种程序员常用的框架,看看你是否落伍了?
- ArrayList-Vector-LinkedList-泛型-增强for
- 数据库阿里连接池 druid配置详解 标签: druidspringjavaxml配置阿里池 2016-06-16 00:34 57532人阅读 评论(11) 收藏 举报 版权声明:本文为博主原创文
- spring boot下定时任务quartz的集群使用
- 模块API之register_module_notifier
- 中国软件网想举办【企服三会】结果玩大了...
- 天天都在数据驱动,你以为数据是天上掉下来的?
- 动力电池回收法规出炉丨IBM量子计算新突破丨iphone X冬天不能用?苹果:恩!
- vs2012+win8内核编译环境
- Linux之iptables详解
- Jenkins的关闭、重启
- xml-基础知识
- 圆的面积