我在某个随机位置编译了一个Linux驱动程序模块(例如/home/user/sample-driver.ko
)。使用此模块的设备在设备树覆盖文件中定义。我想在应用覆盖时加载此驱动程序。我做了以下步骤:
- 将
sample-driver.ko
移动到/lib/modules/<version>/kernel/drivers/iio/dac/sample-driver.ko
- 运行
depmod
(无参数) - 通过
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