我们如何在两个不同的内核模块之间共享Hash表

时间:2015-10-05 11:30:36

标签: c linux linux-kernel declaration extern

是否可以在另一个内核模块中共享一个内核模块中定义的Hash_table。

/*Hash table declarartion and definition*/
DEFINE_HASHTABLE(my_hash_table, HASH_TABLE_BITS);

我在一个模块中填充此表,但是我也希望在另一个模块中访问此表。

extern声明是否适用于此处。 extern DEFINE_HASHTABLE(...,...)

1 个答案:

答案 0 :(得分:3)

DEFINE_HASHTABLE是变量的定义。对于声明变量(未定义),请使用DECLARE_HASHTABLE

extern DECLARE_HASHTABLE(my_hash_table, HASH_TABLE_BITS);

请注意,在Linux内核中,您需要在一个模块中定义的make变量可以在另一个模块中使用的其他步骤。

首先,您需要从模块中导出符号,该模块定义了变量:

EXPORT_SYMBOL(my_hash_table);

其次,直到你在单个目录中构建两个模块(使用单个makefile),你需要在Makefile中指定,用于编译其他模块,它应该使用Module.symvers文件第一个模块:

KBUILD_EXTRA_SYMBOLS := <dir-with-symbol-provider-module>/Module.symvers