内核通知链 — notifier chain
大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于通知链表来说有一个通知方与一个接收方。在通知这个事件时所运行的函数由被通知方决定,实际上也即是被通知方注册了某个函数,在发生某个事件时这些函数就得到执行。通知链技术可以概括为:事件的接收者将事件发生时应该执行的操作通过函数指针方式保存在链表中,然后当事件发生时通知者依次执行链表中每一个元素的回调函数。
一、notifier chain 定义和接口
static struct notifier_block ledtrig_sleep_pm_notifier = {.notifier_call = ledtrig_sleep_pm_callback, // 回调函数.priority = 0, // 优先级};register_pm_notifier(&ledtrig_sleep_pm_notifier); // 注册到通知链unregister_pm_notifier(&ledtrig_sleep_pm_notifier); // 从通知链注销pm_notifier_call_chain(PM_POST_SUSPEND); // 调用通知链