内核中,有很多函数和变量被一些特定的修饰符所修饰,这在以往的C语言编程是不常见的。说明如下:
#define __init __attribute__ ((__section__ (".init.text")))
#define __initdata __attribute__ ((__section__ (".init.data")))
#define __exitdata __attribute__ ((__section__(".exit.data")))
#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
#ifdef MODULE
#define __exit __attribute__ ((__section__(".exit.text")))
#else
#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text")))
#endif
其中,__init和__exit标记函数,__initdata和__exitdata标记数据。__init宏使内建模块中的init函数在执行完成后释放掉,不过可装载的模块是不受影响的。__exit宏会使那些内建到内核的模块省略掉cleanup函数,不过和__init一样,对loadable模块没影响。
本文详细解析了Linux内核中用于标记函数和数据的特殊修饰符,包括__init、__initdata、__exit等,并解释了它们如何在不同模块中执行特定任务。
208

被折叠的 条评论
为什么被折叠?



