内核驱动宏__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__,在驱动模块函数前加了这个表示在内核启动的时候,将这些函数放入对应的某些区段内进行执行,启动完毕,释放这些段的内存。
#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__,在驱动模块函数前加了这个表示在内核启动的时候,将这些函数放入对应的某些区段内进行执行,启动完毕,释放这些段的内存。
相关文章推荐
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- 内核中_init,_exit中的作用
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- 内核中_init,_exit中的作用
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法 .
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- 内核中_init,_exit中的作用
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- 内核中_init,_exit中的作用
- 内核中的_init,_initdata,_exit,_exitdata
- 内核中_init,_exit中的作用
- 内核中_init,_exit中的作用
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- linux内核及驱动开发中有关__init,__exit和__initdata的用法
- 内核中_init,_exit中的作用