如何调用任何内核函数?

How to invoke any kernel function?

我知道 Kprobes 可以用来探测任何内核函数。但是在浏览了它的文件之后,我意识到它主要是一种被动的实体。它只是将探测器放在执行序列的中间。

但是如果我想直接调用任何内核函数而不关心执行顺序怎么办。

我怎样才能做到这一点?

已更新:

注意:我想在我的内核模块中调用任何内核函数,而不是从任何用户 space 应用程序调用。

不能简单地从用户 space 中的应用程序调用内核函数。系统调用是用户 space 中唯一可以请求内核服务的函数。

要直接调用内核函数,如果你对内核编程感兴趣,你必须实现一个内核模块。 This 是起点。

编辑


因为你已经指定要从模块内部调用内核函数,所以完全没有问题。只需按照我上面发布的 link 文档即可。

what if I want to invoke any kernel function directly

至少不是所有的功能都可以直接使用。

在您的案例中调用内核函数时请考虑以下几点。

  • 来自不同模块的内核函数只有在使用EXPORT_SYMBOL宏系列导出时才能使用。
  • static 不能在该文件外直接使用函数。

示例

函数定义(i2c_smbus_read_byte_data)
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L2689

此处使用
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L350