Linux 如何从内核代码调用内核模块(LKM)中定义的函数?
我是内核开发技术的新手。我想知道,一旦动态加载内核模块,是否有办法在内核和内核模块(LKM)之间建立通信。我想做的是在内核模块等待数据时,从内核的特定部分调用函数来发送数据。如果模块还没有加载,我想这会引起一些麻烦,因为函数还没有定义。所以我的问题是,有一种方法可以从内核的某个地方调用在内核模块上定义的函数吗?我找不到这个问题的任何来源,所以我也想问你,我正在尝试做的是不是一种不好的做法,是否有其他方法可以做到这一点 这就是我想做的:Linux 如何从内核代码调用内核模块(LKM)中定义的函数?,linux,linux-kernel,kernel-module,Linux,Linux Kernel,Kernel Module,我是内核开发技术的新手。我想知道,一旦动态加载内核模块,是否有办法在内核和内核模块(LKM)之间建立通信。我想做的是在内核模块等待数据时,从内核的特定部分调用函数来发送数据。如果模块还没有加载,我想这会引起一些麻烦,因为函数还没有定义。所以我的问题是,有一种方法可以从内核的某个地方调用在内核模块上定义的函数吗?我找不到这个问题的任何来源,所以我也想问你,我正在尝试做的是不是一种不好的做法,是否有其他方法可以做到这一点 这就是我想做的: 我在LKM上有一个名为“foo(mesg)”的函数 我希望
- 我在LKM上有一个名为“foo(mesg)”的函数
- 我希望在“arch/x86/mm/fault.c”代码中调用此函数“foo”
- 其目的是存储这些“MESG”,然后使用/proc在用户空间中收集它们。这就是为什么我要建立一个LKM
arch/x86/mm/fault.c
中接收并本地存储方法指针,并使用export\u SYMBOL
将其导出,我们将其称为“init\u foo(void*fn\u ptr)”
在模块中,创建回调函数并调用
init\u foo
to。现在,当您想要调用回调函数时,只需先检查是否有它的地址(!=null)
,如果有,然后使用它来调用回调函数。因此,我更改了代码“arch/x86/mm/fault.c”中放置函数“foo(mesg)”的特定部分。我想用这里定义的函数“foo”实现我的LKM,为了接收到每个“mesg”,我将它存储在数据结构中。LKM将有一个使用/proc与守护进程的接口,以便将收集的数据外部化到用户级别。我想不出在哪里插入“EXPORT\u SYMBOL”就行了。@ViniciusEXPORT\u SYMBOL(foo)
应该紧跟在函数定义之后。查看代码中其他符号是如何导出的示例。