我是内核开发技术的新手。我想知道一旦动态加载内核模块,是否有办法在内核和内核模块(LKM)之间建立通信。我想做的是在内核模块正在等待的同时,从内核的特定部分调用函数以发送一些数据。如果模块尚未加载,我想这会引起一些麻烦,因为该函数也尚未定义。所以我的问题是,有一种方法可以从内核上的某个地方调用在内核模块上定义的函数?我找不到这个问题的任何资料,所以我也想问你我想做的事是否是不好的做法,以及是否还有另一种方法可以做到这一点。
这是我想要做的:
您可以通过在模块中创建一个回调函数并使用其地址进行调用来实现。您需要创建一个函数,该函数在arch/x86/mm/fault.c
中接收并本地存储方法指针,然后使用EXPORT_SYMBOL
导出它,让我们将其称为“ init_foo(void * fn_ptr)”。在您的模块中,创建您的回调函数,然后将
init_foo
调用为pass its address。现在,无论何时要调用回调函数,只需检查一下是否有其地址first (!= null)
,如果有,请使用它来调用回调函数。