linux - 我如何找出一个 Linux 模块引用另一个模块?

标签 linux linux-kernel linux-device-driver

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

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

- 表示 xsoe 指的是 com20020。可能存在编程错误,因此 xsoe 无意中使用了来自 com20020 的符号。我怎样才能找到这种依赖的原因(最好不卸载 com20020)? (depmod -n 没有提供任何线索。)

最佳答案

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

d129e694 debug        [com20020]

那里。 com20020xsoe 的源代码都定义了 unsigned debug; MODULE_PARM(debug, "i");nm com20020.onm 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/

相关文章:

linux - 如何使用 -ggdb 标志编译 linux 内核模块

linux - 我自己的 linux Chorded 键盘驱动程序和我的嵌入式应用程序的接口(interface)

linux - 如何将多个结构 BIO 组合成一个结构请求?

Linux:KVM 下原始套接字发送的数据包本地未收到

linux - 如何以根用户身份输入Pod?

在 Linux 中检查 ELF 是否使用 UPX 打包

c - Linux 内核 RSA 签名验证 crypto_akcipher_verify() 输出

linux - 如何从命令行检查 SMTP 是否正常工作(Linux)

Linux LVM 快照脏 block 位图

linux - 为什么 dev.bus 在我的设备中为 NULL?