モジュールとしてビルドするために3状態カーネル設定オプションを設定しましたが、実行時にそのカーネルモジュールをロードせずに自動的にロードしないとします。結果カーネルは、オプションを完全に無効にしたのと同じように機能しますか?または、アンロードされたモジュールと無効なカーネルオプションの間に違いはありますか?
Gentooシステムにパッケージをインストールすると、次の警告メッセージが表示されます。
CONFIG_FLUX_CAPACITORは設定しないでください。
通常、このオプションは実際にはモジュールとしてビルドされるように設定されており、ロードされません。これまでのところ、ソフトウェアは私が経験したすべての状況でうまく機能しているようですが、これが一般的に期待できるものかどうか疑問に思います。
答え1
コンパイル時オプションを無効にすると、コードはコンパイルされません。
モジュールのアンロードは、コードがモジュールにコンパイルされますがメモリにロードされないため実行されないことを意味します。時にはモジュールが自動的にロードされる可能性があるため、何かを無効にする必要がある場合は、安全なオプションはコンパイル時に無効にするかブラックリストに追加すること/etc/modprobe.conf
です/etc/modprobe.d/*
。または、ファイルシステムからモジュールファイルを削除します。depmod
後でそれを実行し、それに依存する他のモジュールがある可能性があることに注意してください(後で問題が発生する可能性があります)。
つまり、能力値は同じです。無効(非)モジュールを使用または使用せずに実行するのに適したコードは、多少異なる場合があります。関数Aをモジュールのカーネルにコンパイルできるとします。機能Bは機能Aを使用できますが、必要でない場合は生成されたコードが異なる場合があります。 Aを有効にすると(モジュールまたはコンパイルされている)、Bに機能Aがあることを確認するオプションのチェックが含まれる場合があります。 Aが無効になっている場合コンパイル時に、Bのこれらの検査は関係がなく、完全にスキップすることができます。ただし、これはコード自体に明示的に指定する必要があります(たとえば、C#ifdef
命令を介して)、コンパイラだけではこれを決定することはできません。したがって、機能Aをオプションの依存関係にする部分の作成者によって異なります。機能的に異なって呼び出す必要があるかどうかは疑わしいです。機能は変更されませんが、実行時間が変わる可能性が高くなります(少しでも - しかし、いくつかの特別なケースではこれが重要かもしれません)。