0

我是 linux 内核编程的新手。我正在开发一个简单的可加载内核模块,只要调度程序运行队列发生变化(rq_rt仅说),它就需要信息。所以我需要从调度程序的函数( , 等....)向我的内核模块(比如 a or 在我的模块中)发送信号或interrupt中断。signal handlerenqueue_rtdequeue_rtcurrent_premept

谁能建议一种如何发送此类信号或中断的方法?

4

2 回答 2

0

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

更多详细信息可在此处获得

于 2019-08-09T10:44:39.567 回答
0

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

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

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

而已...!!!您将从内核例程中获得一个函数调用。还要确保在退出模块时,将符号恢复为 NULL,否则内核将崩溃。

于 2020-03-31T08:58:23.820 回答