如何获取静态内置到 linux 内核中的活动驱动程序列表?

Joh*_*mBF 43 drivers linux-kernel kernel-module

虽然我可以使用lsmod它来显示当前活动的内核模块,但我如何才能看到哪些驱动程序静态内置到内核中并且当前处于活动状态?

小智 42

你可以做一个 cat /lib/modules/$(uname -r)/modules.builtin

来自内核文档

内置模块

该文件列出了内核中内置的所有模块。这被 modprobe 用来在尝试加载内置内容时不会失败。


cyb*_*ard 10

如果你的 linux 有一个 /proc/config.gz

这具有所有内置模块。将其复制到别处并解​​压缩。打开文件,带有“=M”的所有内容都构建为模块。带有“=Y”的所有内容都是静态构建的。

hwinfo 会列出“Driver:” 检查上面的文件,看它是否是静态构建的。

仅供参考:所有静态构建的驱动程序始终加载到内存中并准备好进行操作。没有相应的硬件,它们什么也做不了,只能使用内存。

  • 该文件也存在于此处:`/boot/config-$(uname -r)`。 (2认同)

小智 5

sysfs 模块区域/sys/module是运行内核可见的所有模块的视图。每个模块目录都有一组 sysfs 接口文件,可以通过用户空间查看和管理模块。一般来说,LKM 有一个refcnt文件,如果它与holder使用它的那些模块的目录一起使用,则该文件将大于 0 。内置模块没有这个文件(或许多其他像initstatetaint.)

尝试find /sys/module -name refcnt -printf '\n%p: ' -exec cat {} \;查看正在使用哪些。

许多模块下都有一个parameters目录,其中包含可以从用户空间查看和修改的参数。在源代码中,这通常是对module_param宏的调用。例如,请参阅kernel/printk.c和模块/sys/module/printk/parameters以获得一些有用的 printk 调整。

下面的所有实体/sys/module都设置在内核模块框架中。有些是硬件驱动程序,有些是 netfilter,有些是文件系统,有些是调试等。