現在アクティブなカーネルモジュールを表示するためにlsmod
を使用できますが、どのドライバーがカーネルに静的に組み込まれていて現在アクティブであるかを確認するにはどうすればよいですか?
あなたはcat /lib/modules/$(uname -r)/modules.builtin
を行うことができます
カーネルから Documentaton
このファイルには、カーネルに組み込まれているすべてのモジュールがリストされています。これは、組み込みのものをロードしようとしたときに失敗しないようにmodprobeによって使用されます。
Linuxに/proc/config.gzがある場合
それはすべてのビルドされたモジュールを持っています。別の場所にコピーして解凍します。 「= M」ですべてがファイルとして開かれ、モジュールとしてビルドされます。 「= Y」が付いているものはすべて静的に作成されます。
hwinfoは "Driver:"をリストします。上記のファイルが静的に構築されているかどうかを確認してください。
参考:静的にビルドされたすべてのドライバーは常にメモリに読み込まれ、アクションの準備ができています。対応するハードウェアがなければ、彼らは何もしませんが、メモリを使用します。
ls /sys/module
すべての組み込みモジュールと外部モジュールが含まれているようです。
しかし、実際にはモジュールではないいくつかのエントリも含まれているようです: https://unix.stackexchange.com/questions/225706/are-modules-listed-under-sys-module-all-the-loaded-モジュール
TODO:ソースを読んで、そこに何が置かれるかをより正確に理解します。
この方法の利点は、/boot
または/proc/config.gz
でカーネル構成を見つけることができることに依存しないことです。
Sysfsモジュール領域/sys/module
は、実行中のカーネルから見えるすべてのモジュールのビューです。各モジュールディレクトリには、ユーザースペースを介してモジュールを表示および管理するための一連のsysfsインターフェースファイルがあります。一般的に、LKMにはrefcnt
ファイルがあり、それを使用するモジュールのholder
ディレクトリと一緒に使用されている場合、このファイルは0より大きくなります。組み込みモジュールにはこのファイル(またはinitstate
やtaint
などの他の多くのファイル)はありません。
find /sys/module -name refcnt -printf '\n%p: ' -exec cat {} \;
を試して、使用されているものを確認してください。
多くのモジュールの下にはparameters
ディレクトリがあり、ユーザースペースから表示および変更できるパラメーターが含まれています。ソースでは、これは通常module_param
マクロの呼び出しです。たとえば、便利なprintkのチューニングについては、kernel/printk.c
およびモジュール/sys/module/printk/parameters
を参照してください。
/sys/module
の下のすべてのエンティティは、カーネルモジュールフレームワークで設定されます。一部はハードウェアドライバー、一部はnetfilter、一部はファイルシステム、一部はデバッグなどです。