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


65

我正在寻找一些要加载i2c-dev和加载的内核模块i2c-bcm2708。但是modprobe命令返回:

sudo modprobe i2c-dev
modprobe: module i2c-dev not found in modules.dep

如何列出系统中所有可用的模块?他们位于哪个目录中?


1
内核没有编译此i2c-dev。您找不到此模块。内核模块位于/ lib / modules /'kernel-version'/ drivers。当您正在寻找linux驱动程序时。
supriady

您可以检查/ boot / config-'kernel-version'并读取此配置文件。您应该知道加载了哪些Linux模块或模块化模块,或者在编译内核时未启用i2c-dev模块。
supriady

Answers:


76
  • 默认情况下,modprobe从目录中的子目录加载模块/lib/modules/$(uname -r)。通常所有文件都有扩展名.ko,因此您可以使用

    find /lib/modules/$(uname -r) -type f -name '*.ko'
    

    或者,考虑到压缩文件:

    find /lib/modules/$(uname -r) -type f -name '*.ko*'
    
  • 但是,要成功加载模块,modprobe需要在文件中列出其依赖项/lib/modules/$(uname -r)/modules.dep(以及相应的二进制版本modules.dep.bin)。如果系统上存在某个模块,但列表中未包含该模块,则应运行depmod将生成此类依赖关系的命令,并自动将模块包含到modules.dep和中modules.dep.bin

  • 此外,如果模块已成功加载,它将在文件中列出/proc/modules(也可以通过命令进行访问lsmod)。


3
Redhat 7模块文件以.xz压缩(不确定是否是因为内核版本或OS版本。是否有人可以向我说明?),所以我认为您可能无法通过jimmij的find命令找到它们。改用 find /lib/modules/$(uname -r) -type f -name *.ko*
Pozinux

1
@Pozinux在Arch Linux 4.13.10上发现了同样的东西,结尾是结尾.gz
Johann

1
@posinux:当心:*.ko*如果您在当前目录中碰巧有一些与之匹配的文件,那么外壳可能会扩展您的文件。最好使用单引号引起来: find /lib/modules/$(uname -r) -type f -name '*.ko*'
Olivier Dulac


5

还有lsmod的命令kmod包在Arch Linux的东西列出,并显示了Linux内核模块包含其他有用的命令,如状态modinformmod modprobe太。

IST由您可以键入程序包提供的所有二进制文件:

pacman -Ql kmod | grep /bin/ --color=always

,你也可以检查该Ø用二进制的wner包pacman -Qo lsmod


Q开关是q uery本地安装的软件包(不像S小号 ynchronize,即远程查看)。


2
重要的是要突出显示lsmod仅显示加载的模块。该线程的作者在加载不在可加载内核模块映射中的模块时遇到问题。此外,该解决方案仅适用于archlinux。这可能不是作者的分布,也可能无法解决其他人的问题。
阿肯多

lsmod至少在Ubuntu上也可以使用@Akendo 。但是,我同意这不能解决OP的问题。
Melebius

2

我更喜欢使用depmod。使用命令:depmod -av|grep MOD_NAME,系统将生成modules.dep / map文件并通过它进行grep。该-v参数对于详细程度很重要,并-a确保将所有可能的模块/lib/modules/都用于modules.dep文件。

这样,可以确保将请求的内核模块以可加载的方式映射到内核。当期望内核模块未在输出中列出时,您知道内核将找不到它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.