Linux内核事件通知链学习

Posted lypbendlf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux内核事件通知链学习相关的知识,希望对你有一定的参考价值。

1.Linux内核子系统

https://blog.csdn.net/qq_36016407/article/details/73558361

 

 系统调用子系统、进程管理、虚拟文件子系统、内存管理、网络管理。

Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notificationchain)。

通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。

2.介绍

转自:https://blog.csdn.net/wh8_2011/article/details/50541212

https://blog.csdn.net/frank_jb/article/details/93191300

 

 例如上图中的事件通知链,针对网络子系统,对应三个事件的通知链,有表示ipv4地址发生变化时的inetaddr_chain,表示ipv6地址发生变化的inet6addr_chain;还有表示设备注册、状态变化的netdev_chain。当有这些事件发生时,会在链表中找到一个优先级高的,执行对应的回调函数。

2.1 通知链的核心结构:

struct notifier_block
{
    int(*notifier_call)(struct notifier_block *, unsigned long, void*);
    structnotifier_block *next;
    intpriority;
};

2.2 运作机制

1、通知者定义通知链。

2、被通知者向通知链中注册回调函数。调用的是notifier_chain_register。

3、当事件发生时,通知者发出通知(执行通知链中所有元素的回调函数)。调用的是notifier_call_chain。

通知者是检测事件发生的,若发生,则通知所有对该事件感兴趣的一方 事件发生。

 

以上是关于Linux内核事件通知链学习的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核通知链机制的原理及实现

Linux通知链机制

linux kernel notifier chain(事件通知链)

linux内核数据结构之等待队列

linux内核数据结构之等待队列

RK3399平台开发系列讲解(内核入门篇)1.41内核通知链