LKM如何调用内核驱动程序的功能?

时间:2016-05-22 12:26:35

标签: linux linux-kernel

我编写了一个LKM(可加载的内核模块),它需要在/ linux / driver下的另一个内核驱动程序模块中调用函数。我不知道如何将这些功能导入LKM。由于/ lib / modules / linux /(作为make -C选项)不包含内核驱动程序的头文件,我不能直接将它们包含为头文件。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

基本上,如果驱动程序使用源代码中的EXPORT宏显式导出函数,则只能从其他模块或内核调用函数。

您认为哪个内核驱动程序完全正确?您不能将代码复制到驱动程序中吗?

答案 1 :(得分:0)

a)当@stdcall指出reg宏时,宏名称实际上是EXPORT_SYMBOL和EXPORT_SYMBOL_GPL

b)注意您要使用的特定呼叫,我发现这是内核版本4.6上最接近的匹配:arch / x86 / include / asm / xen / hypercall.h

208 static inline long
209 privcmd_call(unsigned call,
210              unsigned long a1, unsigned long a2,
211              unsigned long a3, unsigned long a4,
212              unsigned long a5)
...

通话是静态的'和导出;因此你不能在LKM中使用它。

c)正如@stdcall指出的那样,你可以尝试复制它,但根据我的经验,这并不总是可以解决,因为可能存在太多的依赖关系。 有些事情只能在内联树中进行,而不是作为内核模块。