我正在寻找一些要加载的内核模块i2c-dev
和i2c-bcm2708
.但modprobe
命令返回:
sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep
如何列出系统中所有可用的模块?它们位于哪个目录中?
答案1
默认情况下,
modprobe
从位于该/lib/modules/$(uname -r)
目录中的内核子目录加载模块。通常所有文件都有扩展名.ko
,因此您可以使用以下命令列出它们find /lib/modules/$(uname -r) -type f -name '*.ko'
或者,考虑压缩文件:
find /lib/modules/$(uname -r) -type f -name '*.ko*'
每个模块也可以通过引用存储在
/lib/modules/$(uname -r)/modules.alias
( 和modules.alias.bin
) 中的别名来加载。但是,要成功加载模块,
modprobe
需要在文件中列出其依赖项/lib/modules/$(uname -r)/modules.dep
(以及相应的二进制版本modules.dep.bin
)。如果系统上存在某个模块,但不在列表中,那么您应该运行一个命令depmod
,该命令将生成此类依赖项并自动将您的模块包含到 和modules.dep
中modules.dep.bin
。此外,如果模块成功加载,它将列在文件中
/proc/modules
(也可以通过命令访问lsmod
)。
答案2
输入modprobe
并按 Tab,自动完成列表应包含所有可加载模块
答案3
里面有packagelsmod
的命令kmod
架构Linux列出并显示 Linux 内核模块的状态,其中还包含其他有用的命令,modinfo
例如rmmod
modprobe
。
到我是您可以键入的包提供的所有二进制文件:
pacman -Ql kmod | grep /bin/ --color=always
,您还可以检查哦pacman -Qo lsmod
带有.wner 的二进制文件包
Q
开关是q查询本地安装的软件包(S
与s同步,即远程检查)。
答案4
您可以检查自动补全是如何执行的:
$ complete -p modprobe
complete -F _modprobe modprobe
declare -f _modprobe
_modprobe ()
{
...
在该函数中有一个内部_installed_modules
$ declare -f _installed_modules
_installed_modules ()
{
COMPREPLY=($(compgen -W "$(PATH="$PATH:/sbin" lsmod |
awk '{if (NR != 1) print $1}')" -- "$1"))
}
所以lsmod | awk '{if (NR != 1) print $1}'
应该显示模块列表