18

ドライバの初期化中module_initとの違いは何ですか?subsys_initcall

4

1 に答える 1

26

違いは、タイミング、より正確には実行の順序に関連しています。つまり、として宣言されたsubsys_initcallプロシージャは、として宣言されたプロシージャの前に実行されることが保証されmodule_initます。この順序により、デバイスドライバーが前者の機能を利用しようとする前に、サブシステムドライバーとプラットフォームドライバーが初期化されます(たとえば、デバイスドライバーはサブシステムデバイスとして登録されます)。

それぞれの実際のマクロ定義は、カーネルが(ロード可能な)モジュール用に構成されているかどうかによって異なります。これらのマクロ(およびその他のinitマクロ)の定義は、include / linux/init.hにあります。

subsys_initcall()組み込みの(静的にリンクされた)モジュールでのみ使用できることに注意してください。
module_init組み込みモジュールまたはロード可能モジュールのいずれかで使用できます。

于 2013-03-21T08:43:35.103 に答える