小弟最近在编译驱动模块的过程中遇到了问题!如果驱动程序文件都放在一个文件夹里,编译模块可以顺利进行(多个模块也可以)。可是,如果我把驱动源文件放在不同的文件夹,每个文件夹中都要单独编译出几个模块时,由于某个文件夹中的代码对另一个文件夹中的代码存在依赖性,编译时会出现如下警告:
*** Warning: <function> [<module>] undefined!
我的每个文件夹中的makefile大致如下:
Makefile
obj-m := modules.o #要生成的模块名
modules-objs:= mymod.o #生成这个模块名所需要的目标文件
KDIR := /lib/modules/`uname -r`/build
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions
我确定在一个文件夹中,用这个makefile没有问题!而且不是EXOORT_SYMBOLE()的问题!,因为我把几个文件夹中的文件放在一个文件夹中可以正常编译!
这个依赖的问题怎么解决??需要加编译选项指定依赖的文件夹吗??求高手帮帮小弟!!
------解决方案--------------------
链接的问题吧,如果有依赖其他的模块,就用-c选项跳过链接
最后再把几个模块链接到一起
应该是这样的吧?
------解决方案--------------------
KBUILD_EXTMOD
------解决方案--------------------
驱动中有没有MODULE_LICENSE("GPL")?
kernel根目录下有没有Module.symvers?
加载模块后,执行cat /proc/kallsyms | grep **(EXPORT_SYMBOL出来的)能不能查到驱动引出的函数?
------解决方案--------------------
你一个EXPORT_SYMBOL()导出来了,试试