我试图在linux模块中分配一大块内存,kalloc
无法做到。
我知道这样做的唯一方法是使用alloc_bootmem(unsigned long size)
,但我只能从linux内核而不是模块中分配它。
所以我提出了这个解决方案:
我将向内核添加函数来分配内存并返回指向它的指针。 然后我将在模块中使用此功能。
这对我的情况来说是最好的解决方案吗?正如我所说,我需要处理大量的记忆......
另外,如何从内核导出函数并在模块中使用它?如何使指向模块可用的数据块的指针?
答案 0 :(得分: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);
完成!
答案 1 :(得分:0)
在模块中,您将无法使用alloc_bootmem。当您不需要连续空间时,请尝试alloc_pages
或vmalloc
。