web-dev-qa-db-ja.com

Linuxカーネルに静的に組み込まれているアクティブなドライバーのリストを取得するにはどうすればよいですか?

現在アクティブなカーネルモジュールを表示するためにlsmodを使用できますが、どのドライバーがカーネルに静的に組み込まれていて現在アクティブであるかを確認するにはどうすればよいですか?

31
JohnnyFromBF

あなたはcat /lib/modules/$(uname -r)/modules.builtinを行うことができます

カーネルから Documentaton

modules.builtin

このファイルには、カーネルに組み込まれているすべてのモジュールがリストされています。これは、組み込みのものをロードしようとしたときに失敗しないようにmodprobeによって使用されます。

32
sager89

Linuxに/proc/config.gzがある場合

それはすべてのビルドされたモジュールを持っています。別の場所にコピーして解凍します。 「= M」ですべてがファイルとして開かれ、モジュールとしてビルドされます。 「= Y」が付いているものはすべて静的に作成されます。

hwinfoは "Driver:"をリストします。上記のファイルが静的に構築されているかどうかを確認してください。

参考:静的にビルドされたすべてのドライバーは常にメモリに読み込まれ、アクションの準備ができています。対応するハードウェアがなければ、彼らは何もしませんが、メモリを使用します。

9
cybernard
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より大きくなります。組み込みモジュールにはこのファイル(またはinitstatetaintなどの他の多くのファイル)はありません。

find /sys/module -name refcnt -printf '\n%p: ' -exec cat {} \;を試して、使用されているものを確認してください。

多くのモジュールの下にはparametersディレクトリがあり、ユーザースペースから表示および変更できるパラメーターが含まれています。ソースでは、これは通常module_paramマクロの呼び出しです。たとえば、便利なprintkのチューニングについては、kernel/printk.cおよびモジュール/sys/module/printk/parametersを参照してください。

/sys/moduleの下のすべてのエンティティは、カーネルモジュールフレームワークで設定されます。一部はハードウェアドライバー、一部はnetfilter、一部はファイルシステム、一部はデバッグなどです。

1
dturvene