免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6072 | 回复: 4
打印 上一主题 下一主题

【求助】内核中使用EXPORT_SYMBOL,编译时调用模块提示undefined,请高手帮忙 [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-11-12 10:33:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-28 16:01 |只看该作者 |倒序浏览
本帖最后由 mydawaa 于 2011-12-28 13:52 编辑

在kernel添加一个模块abc,这个模块直接编译到内核当中去,在xyz.c中调用此模块EXPORT的函数,编译时提示如下错误,编译停止:
abc.c和xyz.c在同一个目录下,其中abc先编译已经生成.o文件,xyz.c也生成.o文件,但在xyz.c编译成ko时出错

WARNING: "func_abc" [drivers/usb/test/xyz.ko] undefined!
WARNING: "func_xyz" [drivers/usb/test/xyz.ko] undefined!
WARNING: "set_abc" [drivers/usb/test/xyz.ko] undefined!
WARNING: "set_xyz" [drivers/usb/test/xyz.ko] undefined!
make[2]: *** [__modpost] Error 1
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/home/xyz/kernel/2.6.21.5'
make: *** [kernelbuild] Error 2

看了很多材料,说这时候undefined不影响模块加载,但现在编译都不能通过。
请问高手,怎样才能忽略告警,让编译进行下去?
谢谢

==================================
此问题终于有答案了,应该是Kconfig和Makefile配合的问题。
解决办法:
1.比如在test目录在Kconfig中定义对应的config,如config TEST_ABC
2.然后在test目录的上层Makefile中要定义obj-$(CONFIG_TEST_ABC)+=test/
3.test目录Makefile中定义obj-$(CONFIG_TEST_ABC)+=abc.o
这样abc.c文件中定义的EXPORT函数才能被正确的导出。

谢谢大家~~

论坛徽章:
1
技术图书徽章
日期:2013-11-12 10:33:00
2 [报告]
发表于 2011-11-28 16:06 |只看该作者
本帖最后由 mydawaa 于 2011-11-28 16:08 编辑

这两个模块如果同时编译到内核或者同时编译成ko,都是可以正常编译完成,且按顺序insmod是没有问题的。

就是当abc编译进内核,让xyz模块编译成ko的时候,编译kernel都不能完成。

在编译出错后查看Module.sysvers文件里面找不到abc模块对应EXPORT_SYMBOL的函数,不知道是什么原因:(

论坛徽章:
1
技术图书徽章
日期:2013-11-12 10:33:00
3 [报告]
发表于 2011-11-29 09:22 |只看该作者
大家没有遇到过类似问题吗?

论坛徽章:
0
4 [报告]
发表于 2011-11-29 09:24 |只看该作者
可能是编译顺序问题。在生成abc.o之后就编译xyz.c应该找不到abc.o中的函数,所以内核编译中断。实在不行的话你先不要编译xyz.c,先把abc.c编译到内核生成内核镜像,然后单独编译xyz.c。

论坛徽章:
1
技术图书徽章
日期:2013-11-12 10:33:00
5 [报告]
发表于 2011-11-29 10:41 |只看该作者
可能是编译顺序问题。在生成abc.o之后就编译xyz.c应该找不到abc.o中的函数,所以内核编译中断。实在不行的话 ...
wloveg 发表于 2011-11-29 09:24


嗯,也是一个办法,但就不明白为什么我那么做不行。
而且我怀疑分开编译可能也解决不了问题,因为在kernel里面的Modules.symvers文件中找不到abc.c中EXPORT_SYMBOL导出的函数,而xyz.c中EXPORT_SYMBOL导出的函数是有的,很是怪异。

kernel里面很多这样的用法都是没有问题的,向内核里其他EXPORT_SYMBOL的函数,被其他模块引用都是没有问题的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP