在第一个模块中定义:
#include <linux/notifier.h>
BLOCKING_NOTIFIER_HEAD(list);
int my_register_client(struct notifier_block *nb) {
blocking_notifier_chain_register(&list, nb);
return 0;
}
EXPORT_SYMBOL(my_register_client);
int my_unregister_client(struct notifier_block *nb) {
blocking_notifier_chain_unregister(&list, nb);
return 0;
}
EXPORT_SYMBOL(my_unregister_client);
int my_notifier_call_chain(unsigned long val, void *v) {
blocking_notifier_call_chain(&list, val, v);
return 0;
}
EXPORT_SYMBOL(my_notifier_call_chain);
在第二个模块中注册通知回调函数:
struct notifier_block fb_notif;
extern void my_register_client(struct notifier_block *nb);
static inline int fb_notifier_callback(struct notifier_block *self,
unsigned long action, void *data) {
pr_err("9999 fb_notifier_callback,action = %ld \n", action);
return NOTIFY_OK;
}
static __init int my_init(void) {
pr_err("my_init\n");
fb_notif.notifier_call = fb_notifier_callback;
my_register_client(&fb_notif);
return 0;
}
在第三个模块中发送通知:
int v = 456;
my_notifier_call_chain(123,&v);
这样第二个模块就可以收到123 和456了。