当前位置:  开发笔记 > 编程语言 > 正文

linux内核模块链接器警告:"***警告:<function> [<module>] undefined!" - 任何摆脱它们的方法?

如何解决《linux内核模块链接器警告:"***警告:<function>[<module>]undefined!"-任何摆脱它们的方法?》经验,为你挑选了2个好方法。

在编译彼此依赖的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将模块插入内核,就会解析未解析的符号.有没有办法摆脱链接器警告?

我已经阅读了3个关于这个问题的Google SERP - 似乎没有人知道答案.在构建内核模块时,这些链接器警告应该是这样的吗?



1> 小智..:

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



2> Gary..:

终于我明白了.感谢shodanex让我走上正轨.

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

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

比如,你有一个模块foo,它取决于模块栏中的符号.

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

在make命令生成文件FOO可能看起来像

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\line,其中pwd/../bar/module是我们依赖的内核模块源的路径.

可以预期KBUILD_EXTRA_SYMBOLS参数以这种方式工作,但它是KBUILD_EXTMOD.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有