Linuxカーネルの開発について読んでいて、理解できないテキストを読んだだけです。モジュールの__initマクロと__exitマクロについて説明している段落は次のとおりです。
これは、カーネル2.2以降の機能を示しています。init関数とcleanup関数の定義が変更されていることに注意してください。__initマクロを使用すると、組み込みドライバーのinit関数が終了すると、init関数が破棄され、そのメモリが解放されますが、ロード可能なモジュールは解放されません。init関数がいつ呼び出されるかを考えると、これは完全に理にかなっています。
__initと同様に機能する__initdataもありますが、関数ではなくinit変数用です。
__exitマクロは、モジュールがカーネルに組み込まれているときに関数を省略します。__exitと同様に、ロード可能なモジュールには影響しません。繰り返しますが、クリーンアップ関数がいつ実行されるかを考慮すると
私は要点を理解します。このマクロ__init
により、組み込みドライバーのinit関数が終了すると、init関数が破棄され、そのメモリーが解放されます。しかし、なぜですか?ローダブルモジュール用ではありませんか?私はそれを理解できませんでした。
ばかげたことは知っていますが、しばらく考えてみて、完全には理解できませんでした。なぜビルトインドライバーではなく、ロード可能なモジュールではないのですか?で割り当てられた変数、アドレスなど__init
は両方に必要ですよね?