如何找出Linux模块引用另一个模块的原因?

如何找出Linux模块引用另一个模块的原因?,linux,linux-kernel,linux-device-driver,Linux,Linux Kernel,Linux Device Driver,在Linux 2.4.25系统上,我有两个可加载的内核模块,com20020和xsoe。这些模块应该相互独立,但/proc/modules具有以下行 xsoe 4528 0 (unused) com20020 10112 0 [xsoe] -说xsoe是指com20020。可能是编程错误导致xsoe无意中使用了com20020中的符号。如何找到此依赖关系的原因(最好不卸载com20020)?(depmod-n没有提供任何

在Linux 2.4.25系统上,我有两个可加载的内核模块,
com20020
xsoe
。这些模块应该相互独立,但
/proc/modules
具有以下行

xsoe                    4528   0 (unused)
com20020               10112   0 [xsoe]

-说
xsoe
是指
com20020
。可能是编程错误导致
xsoe
无意中使用了
com20020
中的符号。如何找到此依赖关系的原因(最好不卸载
com20020
)?(
depmod-n
没有提供任何线索。)

我查看了
/proc/ksyms
中的可疑符号,这些符号也可能出现在
xsoe
的源代码中;最终我看到了那条线

d129e694 debug        [com20020]
在那里。
com20020
xsoe
的源都有
无符号调试的定义模块(调试,“i”)
nm com20020.o
nm xsoe.o
的输出中,符号显示为常见符号:

解决方法是将对象
debug
定义为具有内部链接(存储类
静态

可以使用
bash
等命令自动搜索公共符号

join -j 3 <(nm com20020.o) <(nm xsoe.o)|grep C$

join-j3linux内核2.4.25太旧了。。。即使是
/proc/modules
输出的格式现在也不同了。至于符号的使用,检查
xsoe
是否使用
com20020
中的符号的最简单方法是检查其
Module.symvers
文件(在
xsoe
构建的同一构建目录中)。感谢您的提示,但是没有
Module.symvers
文件。
join -j 3 <(nm com20020.o) <(nm xsoe.o)|grep C$