build-in module 的init function會加上__init這個字樣,這是指當kernel做完這個module_init function後,即可釋放其resource,因為到下一次開機之前都不會再執行到了。其定義在include/linux/init.h:

#define __init        __section(.init.text) __cold notrace

這是讓gcc知道當compile時,把這個fucntion放到text section。當initialize完成後即可釋放memory。開機完成後,看到的Freeing unused kernel memory: xxx k就是釋放的結果。

同樣的,在module_exit的前面也要加上__exit。

__init和__exit對loadable的module就沒有意義了。

 

對data則使用__initdata。

kezeodsnx 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • 沒有暱稱
  • __init 和 __exit 應該是對非模組化才沒有意義喔!