在我的 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/modules
or /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 驱动程序,这是因为它们是平台设备。
这是通过以下方式识别的:
alias: platform:
来自 modinfo 命令的信息- c_can_platform 的源代码将 定义
c_can_plat_driver
为platform_driver
:
平台驱动程序在代码中注册,然后作为 Linux 内核启动过程的一部分,插入/启动平台驱动程序列表。
我需要找到更具体的证据/文档,但这对我来说现在有意义,所以我将其作为答案。