如何调用任何内核函数?
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
我知道 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