1、EXPORT_SYMBOL是什么?
EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用(使用前使用extern声明一下就行),即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。
注意:
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。
2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。
2、使用流程
在模块函数定义之后使用“EXPORT_SYMBOL(函数名)”来声明。
在调用该函数的另外一个模块中使用extern对之声明。
先加载定义该函数的模块,然后再加载调用该函数的模块,请注意这个先后顺序。
3、示例
static int function_one(void) { printk("EXPORT_SYMBOL In Func: %s... ",__func__); return 0; } EXPORT_SYMBOL(function_one);