【问题标题】:export functions in linux kernel to linux modules将 linux 内核中的函数导出到 linux 模块
【发布时间】:2013-08-29 10:29:42
【问题描述】:

我正在尝试在 linux 模块中分配一大块内存,而 kalloc 做不到。

我知道这样做的唯一方法是使用alloc_bootmem(unsigned long size),但我只能从 linux 内核而不是从模块中分配它。 所以我想出了这个解决方案:

我将向内核添加分配内存并返回指向它的指针的函数。 然后我会在模块中使用这个函数。

这是适合我情况的最佳解决方案吗?正如我所说,我需要处理一大块内存......

另外,我如何从内核中导出一个函数并在模块中使用它?如何使指向数据块的指针对模块可用?

【问题讨论】:

  • 在内核源代码中查找 EXPORT_SYMBOL() 的用法。

标签: linux module kernel


【解决方案1】:

这就是你要做的:

在带有符号的内核文件中,在符号前添加以下标头

#include <linux/module.h>

<here there should be the declaration of the symbol>

现在在符号后面加上这个

EXPORT_SYMBOL(<name of the symbol>);

例如:

#include <linux/module.h>
int (*foo)(void);

EXPORT_SYMBOL(foo);

完成!

【讨论】:

  • 我在 Centos 6.3 上验证了这一点,所以在另一个版本上可能会有点不同,但想法是正确的。
【解决方案2】:

在模块中您将无法使用 alloc_bootmem。当您不需要连续空间时,请尝试 alloc_pagesvmalloc

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2012-04-11
    • 2013-12-17
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2011-05-03
    • 2016-03-25
    相关资源
    最近更新 更多