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



我在某个随机位置编译了一个Linux驱动程序模块(例如/home/user/sample-driver.ko)。使用此模块的设备在设备树覆盖文件中定义。我想在应用覆盖时加载此驱动程序。我做了以下步骤:

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

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

我尝试过的:

  • 兼容字符串在modules.alias文件中
  • 手动将CCD_ 10添加到CCD_

但什么都不管用。问题出在哪里?

可能存在一些潜在问题

  • 检查模块依赖项并运行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

最新更新