ドライバを初期化するときにmodule_init
とsubsys_initcall
の違いは何ですか?ドライバの初期化中にmodule_initとsubsys_initcallの違いは何ですか?
答えて
この違いは、タイミング、より正確には実行の順序に関係します。つまり、subsys_initcall
と宣言された手続きは、手続きがmodule_init
と宣言される前に実行されることが保証されています。この順序付けは、デバイスドライバが前者の機能を利用しようとする前に、サブシステムドライバおよびプラットフォームドライバが初期化されることを保証する(例えば、デバイスドライバはサブシステムデバイスとして登録する)。
それぞれの実際のマクロ定義は、カーネルが(ロード可能な)モジュール用に構成されているかどうかによって異なります。これらのマクロ(および他の初期マクロ)の定義は、
にあります。subsys_initcall()
は、組み込みの(静的にリンクされた)モジュールでのみ使用できます。
module_init
は、組み込みモジュールまたはロード可能モジュールのどちらでも使用できます。
非常にクリア..ありがとう.. – kzs
ロード可能な '* .ko'モジュールの場合、' subsys_initcall() 'は' module_init() 'と同じ' 'device_initcall()' 'にマップされています。 ://lxr.free-electrons.com/source/include/linux/init.h#L298 – TheCodeArtist
マニュアルページを確認しましたか? – rekire
マニュアルページのエントリがありません。 – kzs
あなたは常にソースを使ってgrepすることができます。ちょうどソースを見ていくことで、多くのことを説明することができます。 –