我试图在 linux 模块中分配一大块内存,kalloc
但做不到。
我知道这样做的唯一方法是使用 alloc_bootmem(unsigned long size)
,但我只能从 linux 内核而不是从模块分配它。所以我想出了这个解决方案:
我将向内核添加分配内存并返回指向它的指针的函数。然后我会在模块中使用这个函数。
这是我的情况的最佳解决方案吗?正如我所说,我需要处理一大块内存......
另外,如何从内核导出函数并在模块中使用它?如何使指向数据块的指针对模块可用?
这是你做的:
在具有符号的内核文件中,在符号前添加以下标头
#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);
完毕!
在模块中您将无法使用 alloc_bootmem。尝试alloc_pages
或vmalloc
当您不需要连续空间时。