module A使用EXPORT_SYMBOL_GPL()到处某个符号,module B使用这个符号,但在加载模块B时却出现如下错误:
[ 4009.479510] B: no symbol version for xxx
[ 4009.479519] B: Unknown symbol xxx (err -22)
这是linux kernel 2.6.26 之后版本的bug,并且这个bug不会被fix;
解决方案是在module B的Makefile中使用KBUILD_EXTRA_SYMBOLS指明module A中Module.symvers的绝对路径,如下:
KBUILD_EXTRA_SYMBOLS=/home/xxx/A/Module.symvers
这样在编译module B时就可以直接将此符号信息会直接连接进去;