__init & __exit属性が初期化と終了モジュールで使用された場合どうなりますか?&私はそれらを使用しないとどうなりますか?例を次に示します。__initと__exit属性の使用
使用属性
static __init int myinit(void)
{}
static __exit void myexit(void)
{}
Witoutが
static int myinit(void)
{}
static void myexit(void)
{}
__init & __exit属性が初期化と終了モジュールで使用された場合どうなりますか?&私はそれらを使用しないとどうなりますか?例を次に示します。__initと__exit属性の使用
使用属性
static __init int myinit(void)
{}
static __exit void myexit(void)
{}
Witoutが
static int myinit(void)
{}
static void myexit(void)
{}
@Sandy属性は、__initマクロは、init関数が廃棄されると、そのメモリ(vmalloc)はinit関数一旦解放させます内蔵ドライバの仕上げ。 __exitマクロは、モジュールがカーネルに組み込まれているときに関数の省略を引き起こします。 __initと__exitの両方は、LKMには適していません。また、主な違いは、メモリの解放されたこれらのリンク What does __init mean in the Linux kernel code? http://amar-techbits.blogspot.in/2012/08/understanding-macro-init-and-exit-in.html
を通過します。
その中__init token
は所与function is used only at initialization time.
モジュールローダdrops the initialization function after the module is loaded, making its memory available for other uses.
のみ初期化中に使用されるデータのための同様のタグ(__initdata)があり、カーネルへのヒントです。 __initと__initdataの使用はオプションですが、それは問題の価値があります。初期化が完了した後で使用する関数(またはデータ構造)を に使用しないように注意してください。
__init family of macros to place one-time initialization routines into a common section in the object file.
の使用その同僚 __initdata、1回限りのデータ項目をマークするために使用されます。これらのマクロを使用して初期化としてマークされたデータは、特別に名前が付けられたELFセクションに収集されます。
これらの1回限りの初期化関数およびデータオブジェクトが使用された後、kernel frees the memory occupied by these items
。 boot process saying, "Freeing init memory: 296K." .
の最終 部付近にオブジェクトファイルの特別なセクションに この機能を配置する目的はとても低いとmemory space that it occupies can be reclaimed when it is no longer needed.
このメッセージ全体が引用であると思いますか?もしそうなら、どこから? –
'__init'と(ある使い慣れたカーネルメッセージを見ているかもしれませんエクステント) '__exit'は、組み込みモジュールだけでなく、ロード可能なカーネルモジュールにも便利です。それらの効果は、あなたが記述したのと同じですが、モジュールのアンロードが無効になっている場合、IIRCがマークされている関数を '__exit'が省略するように指示する点が異なります。 – Eugene
@Eugene、本当にありがとう、私を訂正してくれてありがとう:-) –