内核驱动宏__init,__exit,__initdata的作用

来源:互联网 发布:网络通信安全管理员证 编辑:程序博客网 时间:2024/05/16 11:39

在编写驱动中,我们经常看到这些宏定义,我们定位进去看看,在<linux/init.h>

#define __init __section(.init.text) __cold notrace
#define __initdata __section(.init.data)
#define __initconst __section(.init.rodata)
#define __exitdata __section(.exit.data)
#define __exit_call __used __section(.exitcall.exit)

再定位__section()宏,它表示的是# define   __section(S)     __attribute__ ((__section__(#S)))

这里用到了__attribute__ 属性,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。这里我们用到了子项_section__,在驱动模块函数前加了这个表示在内核启动的时候,将这些函数放入对应的某些区段内进行执行,启动完毕,释放这些段的内存。

0 0