是否可以在另一个内核模块中共享一个内核模块中定义的Hash_table。
/*Hash table declarartion and definition*/
DEFINE_HASHTABLE(my_hash_table, HASH_TABLE_BITS);
我在一个模块中填充此表,但是我也希望在另一个模块中访问此表。
extern声明是否适用于此处。 extern DEFINE_HASHTABLE(...,...)
答案 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