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

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

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

我将这个表填充到一个模块中,但是我想在另一个模块中访问这个表。

外部申报工作在这里。 extern DEFINE_HASHTABLE(...,...)

DEFINE_HASHTABLE是变量的定义 。 对于声明变量(不定义它)使用DECLARE_HASHTABLE

 extern DECLARE_HASHTABLE(my_hash_table, HASH_TABLE_BITS); 

请注意,在Linux内核中,需要为在另一个模块中定义的make变量在另一个模块中使用额外的步骤。

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

 EXPORT_SYMBOL(my_hash_table); 

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

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