web-dev-qa-db-ja.com

インストールされている外部カーネルモジュールのリストを取得する方法

Linuxカーネル3.2のドキュメントから( Documentation/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の答えを知りたいのですが。

5
netvope

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/nvidia/lib/modules/2.6.32-5-vserver-686-bigmem/kernelにあることに気付きました。そのようなレイアウトがDebianのポリシーであるかどうかはわかりません。私が知っているDebianカーネルポリシーに最も近いものは Debianカーネルハンドブック ですが、関連するものは見つかりませんでした。もちろん、Ubuntuはいかなる場合でもDebianポリシーに拘束されません。

3
Faheem Mitha