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の答えを知りたいのですが。
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ポリシーに拘束されません。