我编写了一个LKM(可加载的内核模块),它需要在/ linux / driver下的另一个内核驱动程序模块中调用函数。我不知道如何将这些功能导入LKM。由于/ lib / modules / linux /(作为make -C选项)不包含内核驱动程序的头文件,我不能直接将它们包含为头文件。有没有办法做到这一点?
答案 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指出的那样,你可以尝试复制它,但根据我的经验,这并不总是可以解决,因为可能存在太多的依赖关系。 有些事情只能在内联树中进行,而不是作为内核模块。