- 论坛徽章:
- 0
|
请高手指点:
有三个文件,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了,为什么还会出现以上问题?请大家帮助! |
|