在 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
中查看了 com20020
中的可疑符号,它也可能出现在 xsoe
的源代码中;最终我看到了这条线
d129e694 debug [com20020]
那里。 com20020
和 xsoe
的源代码都定义了 unsigned debug;
MODULE_PARM(debug, "i");
在 nm com20020.o
和 nm xsoe.o
的输出中,符号显示为 common:
00000004 C debug
解决方法是将对象debug
定义为具有内部链接(存储类
静态
)。
可以使用 bash
命令自动搜索常见符号,例如
join -j 3 <(nm com20020.o) <(nm xsoe.o)|grep C$
关于linux - 我如何找出一个 Linux 模块引用另一个模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36030775/