如何从内核代码调用内核模块(LKM)中定义的函数?

问题描述 投票:1回答:2

我是内核开发技术的新手。我想知道一旦动态加载内核模块,是否有办法在内核和内核模块(LKM)之间建立通信。我想做的是在内核模块正在等待的同时,从内核的特定部分调用函数以发送一些数据。如果模块尚未加载,我想这会引起一些麻烦,因为该函数也尚未定义。所以我的问题是,有一种方法可以从内核上的某个地方调用在内核模块上定义的函数?我找不到这个问题的任何资料,所以我也想问你我想做的事是否是不好的做法,以及是否还有另一种方法可以做到这一点。

这是我想要做的:

  • 我在LKM上有一个名为“ foo(mesg)”的函数
  • 我希望在“ arch / x86 / mm / fault.c”代码中将此函数称为“ foo”
  • 目的是存储这些“消息”,然后使用/ proc将它们收集在用户空间中。这就是为什么我要构建LKM。
linux linux-kernel kernel-module
2个回答
0
投票
如果您想获得更多帮助,最好是对内核模块的功能有更具体的了解。

0
投票
所以我的问题是,有一种方法可以调用定义在内核中某个地方的内核模块?
您可以通过在模块中创建一个回调函数并使用其地址进行调用来实现。您需要创建一个函数,该函数在arch/x86/mm/fault.c中接收并本地存储方法指针,然后使用EXPORT_SYMBOL导出它,让我们将其称为“ init_foo(void * fn_ptr)”。

在您的模块中,创建您的回调函数,然后将init_foo调用为pass its address。现在,无论何时要调用回调函数,只需检查一下是否有其地址first (!= null),如果有,请使用它来调用回调函数。

© www.soinside.com 2019 - 2024. All rights reserved.