通过 configfs 应用设备树覆盖后,Linux 内核模块无法加载

问题描述 投票:0回答:1

我有一个在某个随机位置编译的 Linux 驱动程序模块(例如

/home/user/sample-driver.ko
)。使用此模块的设备在设备树覆盖文件中定义。我想在应用覆盖时加载此驱动程序。我执行了以下步骤:

  1. sample-driver.ko
    移动到
    /lib/modules/<version>/kernel/drivers/iio/dac/sample-driver.ko
  2. 运行
    depmod
    (无参数)
  3. 通过
    configfs
  4. 应用设备树覆盖

此时,模块应该已加载,并且

iio:deviceX
/dev
目录中可见。但是,该模块未加载。 可以使用 modprobe sample-driver
 手动探测模块。

我尝试过的:

    兼容的字符串位于
  • modules.alias
     文件中。
  • 手动将
  • kernel/drivers/iio/dac/sample-driver.ko
     添加到 
    modules.order
但是没有任何效果。问题可能出在哪里?

linux driver overlay device-tree iio
1个回答
0
投票
也许有一些潜在的问题,

    检查模块依赖关系并运行
  • modinfo sample-driver.ko
     显示依赖关系
  • 检查模块版本,您的驱动程序模块是为不同的内核版本编译的,您可以检查内核版本以运行
  • uname -r
    命令
  • 检查模块权限,可以通过命令检查权限
  • ls -l
    
    
  • 加载顺序,检查驱动程序模块是否在其可能具有的任何依赖项之后加载。您可以使用
  • lsmod
     命令
    检查模块加载顺序
  • 运行
  • dmesg
     此命令并为您提供有关为何未自动加载模块的更多信息。
  • 检查 modprobe 配置,也许检查 /etc/modprobe.d/ 目录中是否有任何可能将您的模块列入黑名单的文件。
  • 尝试使用此命令手动加载模块
  • insmod /lib/modules/$(uname -r)/kernel/drivers/iio/dac/sample-driver.ko
    
    
  • 检查设备树覆盖
  • 验证模块是否正确构建
  • make and make install
    
    
© www.soinside.com 2019 - 2024. All rights reserved.