2013-08-29 56 views
0

我想在linux模塊中分配一大塊內存,而kalloc不能這樣做。在linux內核到linux模塊的導出函數

我明白做到這一點的唯一方法是使用alloc_bootmem(unsigned long size),但我只能從Linux內核分配它,而不能從模塊分配。 所以我想出了這個解決方案:

我將添加函數內核分配內存並返回指針。 然後我會在模塊中使用這個功能。

這是我的情況的最佳解決方案?正如我所說的,我需要處理一大塊內存......

另外,如何從內核中導出函數並在模塊中使用它?如何使指向數據塊的指針可用於模塊?

+0

查看內核源代碼以獲取EXPORT_SYMBOL()的用法。 –

回答

0

在模塊中,您將無法使用alloc_bootmem。如果您不需要連續的空間,請嘗試alloc_pagesvmalloc

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); 

完成!

+0

我在Centos 6.3上對此進行了驗證,所以在另一個版本上可能會有所不同,但這個想法是正確的。 –