web-dev-qa-db-ja.com

カスタムメイドのカーネルがモジュールサポートで構築されているかどうかを検出できますか?

ベンダーが提供する最小限のLinuxインストールが提供されました。前の質問への回答から、モジュールサポートの有無にかかわらずカーネルを構築できることがわかりました。 .koファイルの形式でドライバーが付属しているCANBUSデバイスを接続する必要があります。提供されているインストールスクリプトを使用してこれらをインストールできるようにしたいのですが、最初に、カーネルがモジュールサポートでビルドされているかどうかを知る必要があります-コマンドラインからこれを検出することは可能ですか?

lsmodを実行すると何も返されないので、現時点では.koファイルがないことがわかりますが、これはカーネルが.koファイルのインストールを許可しないことを意味しますか?

7

/procファイルシステムがある場合、ファイル/proc/modulesは、カーネルがモジュールサポートでコンパイルされている場合にのみ存在します。ファイルが存在するが空の場合、カーネルはモジュールをサポートしていますが、現時点では何もロードされていません。ファイルが存在しない場合、カーネルはモジュールをロードできません。

/procなしでロード可能なモジュールをサポートすることは技術的に可能です。カーネルバイナリにinit_moduleおよびdelete_moduleシステムコールが存在するかどうかを確認できます。圧縮されたバイナリ(例:vmlinuzまたはuImage)しかない場合、これは簡単ではない可能性があります。 vmlinuzについては vmlinuzをvmlinuxに解凍するにはどうすればよいですか? を参照してください。カーネルの大部分を解凍できたら、文字列sys_init_moduleを検索します。

モジュールがサポートされている場合は、とにかく独自のモジュールをコンパイルするために追加のファイルが必要になることに注意してください:カーネルヘッダー。これらはCヘッダーファイル(*.h)であり、その一部はカーネルのコンパイル時に生成されます(したがって、カーネルソースから取得することはできません)。 カーネルソースツリーには何が含まれていますか?これはLinuxカーネルヘッダーに関連していますか? を参照してください。

ほとんどのディストリビューションは、カーネル構成を含むテキストファイルをどこかに保存します。 Debianシステムでは、/boot/config-<kernel_version>にあります。

次に、そのファイルに対してgrepを実行するだけです。

grep CONFIG_MODULES /boot/config-<kernel_version>
4
Marco