gpt4 book ai didi

linux - Linux 内核模块中定义的功能可以用于内核代码吗?

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:17 24 4
gpt4 key购买 nike

我可以使用 EXPORT_SYMBOL 在模块或其他代码上使用内核代码的功能。

相反,我想在内核代码中使用EXPORT_SYMBOL来使用内核模块的功能。

我有什么选择吗?

最佳答案

加载内核时,加载器应该解析内核使用的每个符号(函数)。

由于加载内核核心时内核模块不可用,因此内核不能直接使用模块中定义的符号。

但是,内核核心可以有一个指针,该指针可以在加载模块时由模块代码进行初始化。这可以被视为某种注册过程:

foo.h:

// Header used by both kernel core and modules

// Register 'foo' function.
void register_foo(int (*foo)(void));

foo.c:

// compiled as a part of the kernel core
#include <foo.h>

// pointer to the registered function
static int (*foo_pointer)(void) = NULL;

// Implement the function provided by the header.
void register_foo(int (*foo)(void))
{
foo_pointer = foo;
}
// make registration function available for the module.
EXPORT_SYMBOL(register_foo);

// Calls foo function.
int call_foo(void)
{
if (foo_pointer)
return foo_pointer(); // call the registered function by pointer.
else
return 0; // in case no function is registered.
}

模块.c:

// compiled as a module
#include <foo.h>

// Implement function
int foo(void)
{
return 1;
}

int __init module_init(void)
{
// register the function.
register_foo(&foo);
// ...
}

关于linux - Linux 内核模块中定义的功能可以用于内核代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095329/

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