如何调用任何内核函数?

时间:2016-01-24 14:56:54

标签: linux linux-kernel kprobe

我知道Kprobes可用于探测任何内核函数。但在浏览完文档后,我发现它主要是一种被动的实体。它只是将探针放在执行序列的中间。

但是如果我想直接调用任何内核函数而不打扰执行序列会怎么样呢。

我怎样才能做到这一点?

更新

注意:我想调用内核模块中的任何内核函数,而不是来自任何用户空间应用程序。

2 个答案:

答案 0 :(得分:2)

无法从居住在用户空间的应用程序中简单地调用内核函数。系统调用是用户空间中唯一可以请求内核服务的函数。

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

修改

由于您已指定要从模块内调用内核函数,因此根本没有问题。只需按照我上面发布的文档链接即可。

答案 1 :(得分:1)

  

如果我想直接调用任何内核函数

并非所有功能都至少可以直接使用。

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

  • 来自不同模块的核心功能只有在使用 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