内核 2.6.26 下的驱动模块 Unknown symbol in module 问题

最简单的示例程序,写两个模块,分别为A和B,在A中导出了一些函数,而在B中使用A导出的函数。模块都使用GPL。问题是在2.6.22和2.6.24下运行加载都很正常,当在2.6.26内核下加载时却出现了了Unknowsymbolinmodule的错误。详见下面的具体描述。两个模块的源码如下:

//ModuleA(mod_a.c)#includelinux/init.h#includelinux/module.h#includelinux/kernel.hstaticintfunc1(void){printk("InFunc:%s...n",__func__);return0;}//Exportsymbolfunc1EXPORT_SYMBOL(func1);staticint__inithello_init(void){printk("Module1,Init!n");return0;}staticvoid__exithello_exit(void){printk("Module1,Exit!n");}module_init(hello_init);module_exit(hello_exit);

//ModuleB(mod_b.c)#includelinux/init.h#includelinux/kernel.h#includelinux/module.hstaticintfunc2(void){externintfunc1(void);func1();printk("InFunc:%s...n",__func__);return0;}staticint__inithello_init(void){printk("Module2,Init!n");func2();return0;}staticvoid__exithello_exit(void){printk("Module2,Exit!n");}module_init(hello_init);module_exit(hello_exit);

MakefileforModuleA[code=BatchFile]obj-m+=mod1.omod1-y:=mod_a.oKVERSION=$(shelluname-r)all:make-C/lib/modules/$(KVERSION)/buildM=$(PWD)modulesclean:make-C/lib/modules/$(KVERSION)/buildM=$(PWD)cleanrm-f*.o*.ko*.cmd[/code]MakefileforModuleB[code=BatchFile]澳门葡亰赌场网址 ,obj-m+=mod2.omod2-y:=mod_b.oKVERSION=$(shelluname-r)all:make-C/lib/modules/$(KVERSION)/buildM=$(PWD)modulesclean:make-C/lib/modules/$(KVERSION)/buildM=$(PWD)cleanrm-f*.o*.ko*.cmd[/code]编译完成后开始加载模块:[code=BatchFile]#insmod./mod1.ko#insmod./mod2.koFATAL:Errorinsertingmod2(/home/user/test/mod2.ko):Unknownsymbolinmodule,orunknownparameter(seedmesg)#dmesg[7029.008527]mod2:nosymbolversionforfunc1[7029.008534]mod2:Unknownsymbolfunc1[/code]在/proc/kallsyms里可以找到moduleA导出的symbol。内核2.6.26版本以前都很正常,只有2.6.26版出现这个错误。请高手帮忙~谢谢

相关文章