如何列出所有可加载的内核模块?

如何列出所有可加载的内核模块?

我正在寻找一些要加载的内核模块i2c-devi2c-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.depmodules.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查询本地安装的软件包(Ss同步,即远程检查)。

答案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}'应该显示模块列表

相关内容