如何从内核内置模块向可加载内核模块发送信号/中断?

How to send a signal / interrupt from kernel built in module to a loadable kernel module?

我是 linux 内核编程的新手。我正在开发一个简单的可加载内核 每当调度程序运行队列发生变化时需要信息的模块 (只说 rq_rt)。所以我需要从调度程序的函数(enqueue_rtdequeue_rtcurrent_premept 等等....).

任何人都可以建议一种发送此类信号或中断的方法吗?

是的。最后我得到了解决方案。我们可以利用内核跟踪机制,ftrace。 这不需要任何内核修改,但我们可以挂钩到不受跟踪保护的内核函数。

有更多详细信息here

另外,为了获得高效的解决方案,您可以使用内核源代码中的函数指针。

但是这里的问题是你必须修改 Linux 源代码。进行此类修改时请务必小心。

  1. 实现你的 NULL 函数指针 Linux 源代码 - 从内核例程调用这个函数指针(检查 NULL 并执行)
  2. 导出符号
  3. 从您的可加载模块中为该符号提供本地函数地址。

就是这样...!!!您将从内核例程中获得一个函数调用。还要确保在退出模块时,将符号放回 NULL,否则内核会崩溃。