您的位置:首页 > 其它

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

2017-01-12 21:36 323 查看
在编写驱动中,我们经常看到这些宏定义,我们定位进去看看,在<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__,在驱动模块函数前加了这个表示在内核启动的时候,将这些函数放入对应的某些区段内进行执行,启动完毕,释放这些段的内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: