免费注册 查看新帖 |

Chinaunix

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

insmod ko后报 “unknown symbol in module”求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-25 10:01 |只看该作者 |倒序浏览
请高手指点:
有三个文件,A,B,C
A依赖于B,C
B依赖C

大体内容如下
文件A:驱动程序文件
static in p_init(void){
    xxxxxxx
    xxxxxxx
    xxxxxxx
    fun_in_b();
    fun_in_c1();
    xxxxxxx
}
static void p_cleanup(void){
    xxxxxxx
    xxxxxxx
}
module_init(p_init);
module_exit(p_cleanup);
和一般的驱动程序没什么不一样。


B:一些API函数,如
void fun_in_b(){
    xxxxxx
    fun_in_c2();
}

C:也是一些API函数,如
void fun_in_c1(){
    xxxxxxx
    xxxxxxx
}
void fun_in_c2(){
    xxxxxxx
    xxxxxxx
}
EXPORT_SYMBOL(fun_in_c1);
EXPORT_SYMBOL(fun_in_c2);

Makefile
KERNEL = /lib/modules/($shell uname -r)/build
TARGET = driver
ifneq($(KERNELRELEASE),)
obj-m:=$(TARGET).o
$(TARGET)-objs:=B.o C.o
else
default:
            $(MAKE) -C $(KERNEL) M=$(shell pwd) modules
endif
clean:
          rm -fr XXXXXXXXXXXXXXXXXXX

问题:
执行make后可以生成ko文件,但会报“WARNING fun_in_b [XXXXXXXXXXXXX/driver.ko] undefined!”看了一下报错函数名,都是在文件C中定义的函数,且在A,B中调用过的。使用insmode XXX.ko后,有-1 unknown symbol in module 的报错

使用dmesg 命令后打印出“driver:unknown symbol XXXXXX”,其中的XXXX也是文件C中定义的函数,且在A,B中调用过的
C文件中所有的函数现实,都使用过EXPORT_SYMBOL了,为什么还会出现以上问题?请大家帮助!

论坛徽章:
0
2 [报告]
发表于 2011-03-25 16:15 |只看该作者
你的A在哪里?如果B和C都是A要用到的源文件,干嘛要这么写Makefile?直接在A里面include它们不行么?

最后,你这个最终到底是几个内核模块?如果只有一个的话,干嘛还要EXPORT那些别人不关心的符号啊?如果不是一个的话...那到底是几个?啥关系?

论坛徽章:
0
3 [报告]
发表于 2011-03-29 18:13 |只看该作者
依次按顺序 insmod 三个module, 最好编写头文件并包含

论坛徽章:
0
4 [报告]
发表于 2013-07-22 10:25 |只看该作者
问下LZ:
1、A.o最后到哪个模块了?
2、A.o如果在不同的驱动模块中,那么B.c中 是否
需要
EXPORT_SYMBOL(fun_in_b);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP