如何获取已安装的外部内核模块的列表?

如何获取已安装的外部内核模块的列表?

来自Linux内核3.2的文档(文档/kbuild/modules.txt

=== 5. Module Installation

Modules which are included in the kernel are installed in the
directory:

    /lib/modules/$(KERNELRELEASE)/kernel/

And external modules are installed in:

    /lib/modules/$(KERNELRELEASE)/extra/

这意味着如果我查看,/lib/modules/$(KERNELRELEASE)/extra/我可以找到所有已安装的外部内核模块。但是,我发现官方 Nvidia 显示驱动程序安装nvidia.ko/lib/modules/$(KERNELRELEASE)/kernel/drivers/video/.这与上述规则相矛盾,并表明该路径不是包含/外部模块的可靠指示符。

如何获取已安装的外部内核模块的列表?如果发行版很重要,我想知道 RHEL 6 和 Ubuntu 10.04 的答案。

答え1

对于 Debian/Ubuntu,类似

dpkg -S *.ko | grep /lib/modules | grep -v linux-image

应该管用。免责声明:我对模式匹配一​​无所知,所以可能有更好的方法来做到这一点。在我的系统上,我得到

nvidia-kernel-2.6.32-5-vserver-686-bigmem: /lib/modules/2.6.32-5-vserver-686-bigmem/nvidia/nvidia.ko
nvidia-kernel-2.6.26-2-vserver-686-bigmem: /lib/modules/2.6.26-2-vserver-686-bigmem/nvidia/nvidia.ko
nvidia-kernel-2.6.26-1-vserver-686-bigmem: /lib/modules/2.6.26-1-vserver-686-bigmem/nvidia/nvidia.ko

这确实假设打包系统已知所有已安装的模块,但这通常是一个好主意。至少在 Debian 上,通常可以将内核模块安装为二进制包。这种方法的优点是它可以告诉您内核模块属于哪个包。类似的方法应该适用于其他使用包管理系统的 Linux 发行版;即他们中的大多数。

由于第三方模块的位置与内核模块的位置相似,因此不容易区分它们。查询包管理器使事情变得更容易。然而,在我当前运行的内核中,在目录中/lib/modules/2.6.32-5-vserver-686-bigmem,我注意到 nvidia 模块位于与主内核模块不同的目录中,即/lib/modules/2.6.32-5-vserver-686-bigmem/nvidiavs /lib/modules/2.6.32-5-vserver-686-bigmem/kernel。我不知道这样的布局是否是 Debian 的政策。我所知道的最接近 Debian 内核政策的是Debian 内核手册,但我没有在那里找到任何相关内容。当然,Ubuntu 无论如何都不受 Debian 政策的约束。

関連情報