如何从内核内置模块向可加载内核模块发送信号/中断?
How to send a signal / interrupt from kernel built in module to a loadable kernel module?
我是 linux 内核编程的新手。我正在开发一个简单的可加载内核
每当调度程序运行队列发生变化时需要信息的模块
(只说 rq_rt
)。所以我需要从调度程序的函数(enqueue_rt
、dequeue_rt
、current_premept
等等....).
任何人都可以建议一种发送此类信号或中断的方法吗?
是的。最后我得到了解决方案。我们可以利用内核跟踪机制,ftrace。
这不需要任何内核修改,但我们可以挂钩到不受跟踪保护的内核函数。
有更多详细信息here
另外,为了获得高效的解决方案,您可以使用内核源代码中的函数指针。
但是这里的问题是你必须修改 Linux 源代码。进行此类修改时请务必小心。
- 实现你的 NULL 函数指针 Linux 源代码 - 从内核例程调用这个函数指针(检查 NULL 并执行)
- 导出符号
- 从您的可加载模块中为该符号提供本地函数地址。
就是这样...!!!您将从内核例程中获得一个函数调用。还要确保在退出模块时,将符号放回 NULL,否则内核会崩溃。
我是 linux 内核编程的新手。我正在开发一个简单的可加载内核
每当调度程序运行队列发生变化时需要信息的模块
(只说 rq_rt
)。所以我需要从调度程序的函数(enqueue_rt
、dequeue_rt
、current_premept
等等....).
任何人都可以建议一种发送此类信号或中断的方法吗?
是的。最后我得到了解决方案。我们可以利用内核跟踪机制,ftrace。 这不需要任何内核修改,但我们可以挂钩到不受跟踪保护的内核函数。
有更多详细信息here
另外,为了获得高效的解决方案,您可以使用内核源代码中的函数指针。
但是这里的问题是你必须修改 Linux 源代码。进行此类修改时请务必小心。
- 实现你的 NULL 函数指针 Linux 源代码 - 从内核例程调用这个函数指针(检查 NULL 并执行)
- 导出符号
- 从您的可加载模块中为该符号提供本地函数地址。
就是这样...!!!您将从内核例程中获得一个函数调用。还要确保在退出模块时,将符号放回 NULL,否则内核会崩溃。