一、EXPORT_SYMBOL 的作用
1.在一个模块中使用 EXPORT_SYMBOL(name)。name 表示函数或者变量等符号,它是对全部内核代码公开的,因此在您的内核模块中可以直接调用 name,即使用 EXPORT_SYMBOL 可以将一个函数以符号的方式导出给其他模块使用。
2.EXPORT_SYMBOL 的符号,是把这些符号和对应的地址保存起来,在内核运行的过程中,可以找到这些符号对应的地址。而模块在加载过程中,其本质就是能动态连接到内核。
3.如果在模块中引用了内核或其它模块的符号,就要 EXPORT_SYMBOL 这些符号,这样才能找到对应的地址连接。
二.EXPORT_SYMBOL 和 EXPORT_SYMBOL_GPL 的区别
EXPORT_SYMBOL(name);
EXPORT_SYMBOL_GPL(name);
这两个宏均用于将给定的符号导出到模块外, _GPL版本的宏定义只能使符号对GPL许可的模块可用。
三、EXPORT_SYMBOL 和 EXPORT_SYMBOL_GPL 使用方法
EXPORT_SYMBOL 使用方法:
在模块函数定义之后使用 EXPORT_SYMBOL(函数名);
在调用该函数的模块中使用 extern 对它声明,才可以开始调用函数;
首先加载(insmod mod1.ko)定义该函数的模块,再