微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux内核模块链接器警告:“***警告:<函数> undefined!” – 任何方式摆脱他们?

编译互相依赖的Linux内核模块时,链接器会提供未定义的符号警告

Building modules,stage 2. MODPOST *** Warning: "function_name1" [module_name] undefined! *** Warning: "function_name2" [module_name] undefined! *** Warning: "function_name3" [module_name] undefined!

一旦将模块插入到使用insmod或modprobe的内核中,即可parsing未parsing的符号。 有什么办法摆脱链接器的警告,但?

在这个问题上,我已经阅读了3个Google SERP,似乎没有人知道答案。 当你构build一个内核模块时,这些链接器警告是否应该是这样的?

如何重命名内核模块名称,而不重命名传递给insmod的.ko。

使用模块读取内核内存

拦截系统调用时无法在X处理内核分页请求

没有设备的设备驱动程序?

Linux的request_threaded_irq irq号码

获取Linux内核中的networking设备列表

使用proc文件打印mem_map的虚拟地址

如何从熵池中阻止/ dev / random population。 我可以卸载一个模块来做到这一点?

如何用QEMUdebuggingLinux内核模块?

从内核模块写入和读取设备文件代码

使用KBUILD_EXTRA_SYMBOLS如下:KBUILD_EXTRA_SYMBOLS ='你的模块路径'/ modulee.symvers

最后我得到了它。 感谢shodanex让我走上正轨。

更新:当应用此修补程序构建较旧版本的内核时要非常小心,因为在旧版本的内核中存在一个Makefile.modpost文件中的错误,当您指定KBUILD_EXTMOD选项时,会使您的构建行为异常并生成错误的目标。

您必须在KBUILD_EXTMOD make参数中指定您依赖的模块源的路径。

说,你有一个模块foo依赖于模块栏中的符号。

foo的文件foo / module /中 ,而bar的源文件bar / module /

Makefile中的make命令可能看起来像

make ARCH=$$ARCH CROSS_COMPILE=$$CROSS_COMPILE -C $$LINUX_DIR M=`pwd`/module modules

(确切的线路可能在您的项目中有所不同)。

将其更改为

make ARCH=$$ARCH CROSS_COMPILE=$$CROSS_COMPILE -C $$LINUX_DIR M=`pwd`/module KBUILD_EXTMOD=`pwd`/../bar/module modules

(我们添加了KBUILD_EXTMOD = pwd /../bar/module 行,其中pwd /../bar/module是我们依赖的内核模块的源的路径。

人们会希望KBUILD_EXTRA_SYMBOLS参数以这种方式工作,但它是KBUILD_EXTMOD

不,他们不是。 你建立你的代码树内或树外,这个消息不应该显示。我认为你应该修复你的Makefile。 这是一个例子makefile。 不完美,但习惯于工作(直到2.6.26,从此没有尝试):

ifneq ($(KERNELRELEASE),) # We were called by kbuild obj-m += mymodule.o mymodule-objs := mymodule_usb.o ao bo co else # We were called from command line KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: @echo ' Building FOO drivers for 2.6 kernel.' @echo ' PLEASE IGnorE THE "Overriding SUBDirs" WARNING' $(MAKE) -C $(KDIR) SUBDirs=$(PWD) modules install: ./do_install.sh *.ko endif # End kbuild check clean: rm -f -r *.o *.ko .*cmd .tmP* core *.i

为了进一步的文档,你可以检查内核树,kbuild过程被记录

与上述使用KBUILD_EXTMOD的技术相关,以及它在哪些内核版本下工作的问题:

andycjw表示在2.6.12中没有为他工作

它在2.6.15中没有为我工作(打破了我的模块构建)

通过内核提交,我看到了许多Makefile.modpost的变化,似乎在2.6.26和2.6.28相关,所以我期望其中之一是限制。

我需要适合你的树。 在我们的源代码中,我们创建了一个SYMBOLSDIR,它是所有模块的路径

SYMBOLSDIR ='某些路径'

make(与上例相同)$(KERNELDIR)MODVERDIR = $(SYMBOLSDIR)模块

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐