是否可以知道哪个源加载了 Linux 内核模块?

是否可以知道哪个源加载了 Linux 内核模块?

在我的 Linux 发行版中,在启动过程中加载了许多模块,我试图找到它们的加载位置。

[root /proc]# lsmod
Module                  Size  Used by
bufferclass_ti          5409  0
omaplfb                11525  0
musb_dsps               6444  0
musb_hdrc              52530  1 musb_dsps
pvrsrvkm              174837  2 bufferclass_ti,omaplfb
c_can_platform          4172  0
c_can                   8180  1 c_can_platform
can_dev                 6951  1 c_can
musb_am335x             1199  0

通过搜索,/etc/init.d我可以看到加载 USB 和帧缓冲区模块的脚本:

[root /etc/init.d]# grep -rsI "modprobe" *
loadusb.sh:modprobe musb_hdrc
loadusb.sh:modprobe musb_am335x
loadusb.sh:modprobe musb_dsps
pvr-init:       modprobe omaplfb
pvr-init:       modprobe bufferclass_ti

但我似乎无法找到 CAN 模块从哪里加载。这个平台上没有/etc/modulesor /etc/modules.conf,我搜索/etc/modprobe/ insmod/c_can但没有运气。在dmesg我可以看到 CAN 驱动程序启动:

[    3.745933] CAN device driver interface
[    3.891592] c_can_platform 481cc000.d_can: c_can_platform device registered (
regs=fa1cc000, irq=68)

但我不知道是什么脚本加载了它。是否有任何进一步的信息/日志我可以挖掘以帮助识别将 CAN 模块放入系统的原因?


一些信息来自modinfo/sys/devices

[root /etc/udev/rules.d]# modinfo c_can
filename:       /lib/modules/3.12.103.12-am335xpsp-TMKv1.03.02R/kernel/drivers/net/can/c_can/c_can.ko
description:    CAN bus driver for Bosch C_CAN controller
license:        GPL v2
author:         Bhupesh Sharma <[email protected]>
srcversion:     692B302E87FD3333EF840FE
depends:        can-dev
intree:         Y
vermagic:       3.12.103.12-am335xpsp-TMKv1.03.02R mod_unload modversions ARMv6 p2v8
[root /etc/udev/rules.d]# modinfo can_dev
filename:       /lib/modules/3.12.103.12-am335xpsp-TMKv1.03.02R/kernel/drivers/net/can/can-dev.ko
alias:          rtnl-link-can
author:         Wolfgang Grandegger <[email protected]>
license:        GPL v2
description:    CAN device driver interface
srcversion:     65FA84AFE987C1155CF95A1
depends:
intree:         Y
vermagic:       3.12.103.12-am335xpsp-TMKv1.03.02R mod_unload modversions ARMv6 p2v8
[root /]# modinfo c_can_platform
filename:       /lib/modules/3.12.103.12-am335xpsp-TMKv1.03.02R/kernel/drivers/net/can/c_can/c_can_platform.ko
description:    Platform CAN bus driver for Bosch C_CAN controller
license:        GPL v2
author:         Bhupesh Sharma <[email protected]>
srcversion:     DA1DCA3FBA7E75E459BDCEC
alias:          platform:d_can
alias:          platform:c_can
alias:          platform:c_can_platform
alias:          of:N*T*Cbosch,d_can*
alias:          of:N*T*Cbosch,c_can*
depends:        c_can
intree:         Y
vermagic:       3.12.103.12-am335xpsp-TMKv1.03.02R mod_unload modversions ARMv6 p2v8
[root /sys/devices]# ls
44e10800.pinmux   fixedregulator.3  platform          software
backlight.4       ocp.2             soc.0             system
breakpoint        panel.5           soc0              virtual

答案1

按照我目前的理解。没有人(用户空间脚本)实际上调用modprobe\insmod来插入这些 CAN 驱动程序,这是因为它们是平台设备

这是通过以下方式识别的:

  1. alias: platform:来自 modinfo 命令的信息
  2. c_can_platform 的源代码将 定义c_can_plat_driverplatform_driver

平台驱动程序在代码中注册,然后作为 Linux 内核启动过程的一部分,插入/启动平台驱动程序列表。

我需要找到更具体的证据/文档,但这对我来说现在有意义,所以我将其作为答案。

相关内容