5

__init & __exit属性が初期化と終了モジュールで使用された場合どうなりますか?&私はそれらを使用しないとどうなりますか?例を次に示します。__initと__exit属性の使用

使用属性

static __init int myinit(void) 
{} 
static __exit void myexit(void) 
{} 

Witoutが

static int myinit(void) 
{} 
static void myexit(void) 
{} 

答えて

3

@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

+0

'__init'と(ある使い慣れたカーネルメッセージを見ているかもしれませんエクステント) '__exit'は、組み込みモジュールだけでなく、ロード可能なカーネルモジュールにも便利です。それらの効果は、あなたが記述したのと同じですが、モジュールのアンロードが無効になっている場合、IIRCがマークされている関数を '__exit'が省略するように指示する点が異なります。 – Eugene

+0

@Eugene、本当にありがとう、私を訂正してくれてありがとう:-) –

3

を通過します。

その中__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 itemsboot process saying, "Freeing init memory: 296K." .

の最終 部付近にオブジェクトファイルの特別なセクションに この機能を配置する目的はとても低いとmemory space that it occupies can be reclaimed when it is no longer needed.

+0

このメッセージ全体が引用であると思いますか?もしそうなら、どこから? –

関連する問題