2

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

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

我怎样才能做到这一点?

更新

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

4

2 回答 2

2

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

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

编辑


正如您已指定要从模块内调用内核函数,那么根本没有问题。只需按照我在上面发布的链接获取文档即可。

于 2016-01-24T15:19:27.343 回答
1

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

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

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

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

例子

函数定义(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

于 2016-01-25T09:23:43.143 回答