如何找出Linux模块引用另一个模块的原因?
在Linux 2.4.25系统上,我有两个可加载的内核模块,如何找出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没有提供任何
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$