使用 linux 内核模块捕获 hrtimer 中断.. 可能吗?

标签 c linux kernel

我希望能够使用 linux 内核模块“捕获”一个 hrtimer 中断,并在稍后的时间重播该中断。关于如何着手做这件事有什么想法吗?

用例:调用 sleep(1) 的程序。我的模块将在 1 秒后触发时获取 hrtimer 中断,等待“x”时间,然后重新触发中断,唤醒进程。

注意:我不想 Hook sleep 系统调用。

谢谢!

最佳答案

老实说,编写一个 Linux 内核模块只是为了修改单个应用程序的 sleep() 的行为听起来有点矫枉过正。

在大多数情况下,您应该能够 use a preloadable shared object to intercept/override sleep() 函数系列与您自己的实现。应用程序将调用您的实现,然后您的代码可以使用修改后的参数列表调用真实函数。

这种方法比涉及内核编程的任何方法都简单得多,侵入性也更小,但如果您的应用程序是静态链接的或者如果它使用直接系统调用而不是库函数,它就不起作用。

关于使用 linux 内核模块捕获 hrtimer 中断.. 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22518379/

相关文章:

c - OSDev - 无法在启用分页的情况下访问 lfb

c++ - 不使用预处理器调用 Clang

c - C代码的输出

c - “#define setId(ptr, value) ((ptr)->id = (value), 0) 是什么意思

mysql - 如何查明 my.cnf 正在使用什么?

c++ - 插入 vector 后内存损坏

c - 无符号算术期间高于 ULONG_MAX 的数字

c++ - 在 Linux 上使用 kbhit() 和 getch()

linux-kernel - Netlink:从内核发送到用户 - EAGAIN 和 ENOBUFS

c - 为什么在内核编程中使用 u8 u16 u32 u64 而不是 unsigned int