【问题标题】:How to find out who loads specific Linux kernel module?如何找出谁加载了特定的 Linux 内核模块?
【发布时间】:2021-12-22 01:29:43
【问题描述】:

我为 Linux 构建了一个特定的驱动程序作为模块 (m),NXP 的 spi-imx。尽管如此,Linux 在引导时会探测此驱动程序。我正在努力找出哪些进程/其他模块/驱动程序请求这个 spi-imx 驱动程序。 depmod 不显示 spi-imx 与其他模块之间的任何依赖关系(spidev 作为子模块除外)。

经过一番研究,我发现 Linux 在检测到新设备时会自动 (?) 调用 modprobe。那么 Linux 是否真的调用 modprobe 是因为设备树中 ecSPI 的状态为“okay”?如果是这样,我该如何防止这种情况?我想通过 modprobe 从用户空间应用程序动态加载 spi-imx。其背后的故事:协处理器将这条 SPI 线与 Linux 引导过程并行使用。这当然会干扰并中断协处理器对 SPI 线的使用。当协处理器通过 SPI(也是一种引导机制)完成传输后,它应该将 SPI 线移交给 Linux。

我非常感谢任何关于此的提示、链接、提示和 cmets。

【问题讨论】:

  • 如果系统中存在设备并在固件表(ACPI、设备树等)中进行了描述,Linux 将尝试枚举它。您在错误的 pin muxing afaics 中的问题。您需要请求引脚,因此不会探测 SPI 主机控制器驱动程序。
  • 一个有点笨拙的选项是在包含行blacklist spi-imx 的 /etc/modprobe.d/*.conf 文件中将模块列入黑名单。这将防止模块被自动加载(通过匹配其别名之一的设备),但仍然可以使用modprobeinsmod 命令加载。

标签: linux-device-driver kernel-module spi imx8 spidev


【解决方案1】:

非常感谢您的回答。正如你们提到的,我还发现 Linux 本身会探测设备是否存在(“好的”)。

一种可能的解决方案是通过 *.conf 文件中的“install spi-imx /bin/false”之类的条目来完全切断 modprobe 调用。但这使得 Linux 和用户空间无法通过 modprobe 加载驱动程序。

位于 /etc/modprobe.d/ 的 *.conf 中的“blacklist spi-imx”是防止 Linux 在引导时探测驱动程序的方法。之后,来自用户空间的 modprobe 可以成功加载驱动程序。

再次感谢和最好的问候

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 2021-10-31
    • 2015-07-20
    • 2019-10-31
    • 2023-03-20
    • 2015-04-29
    • 2013-03-10
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多