gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:04 24 4
gpt4 key购买 nike

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

这就是我想要做的:

  • 我的 LKM 上有一个名为“foo (mesg)”的函数
  • 我希望在“arch/x86/mm/fault.c”代码中调用这个函数“foo”
  • 目的是存储这些“消息”,然后使用/proc 在用户空间中收集它们。这就是我构建 LKM 的原因。

最佳答案

So my question is, there is a way of calling a function defined on kernel module from somewhere on the kernel?

您可以通过在模块中创建回调函数并使用其地址调用它来实现。您需要创建一个函数来接收方法指针并将其本地存储在 arch/x86/mm/fault.c 中,并使用 EXPORT_SYMBOL 将其导出,我们称之为“init_foo( void* fn_ptr)".

在您的模块中,创建您的回调函数并调用init_foopass its address .现在,每当您想调用回调函数时,只需检查您是否有它的地址 first (!= null),如果有,则使用它来调用您的回调函数。

关于linux - 如何从内核代码调用内核模块 (LKM) 中定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25497069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com