linux内核源码中常见宏标志tagLinux认证考试

文章作者 100test 发表时间 2010:03:31 07:29:12
来源 100Test.Com百考试题网


  这些宏包括 __init、__initdata、__initfunc()、asmlinkage、ENTRY()、FASTCALL()等等。它们的定义主要位于 Include\linux\linkage.h和 include\asm-i386\Init.h以及其他一些.h文件中。

  1) __init位置:include\asm-i386\Init.h

  定义:#define __init __attribute__ ((__section__ (".text.init")))

  注释:这个标志符和函数声明放在一起,表示gcc编译器在编译的时候需要把这个函数放.text.init section中,而这个section在内核完成初始化之后,会被释放掉。

  举例:asmlinkage void __init start_kernel(void){...}

  2) __initdata

  位置:include\asm-i386\Init.h

  定义:#define __initdata __attribute__ ((__section__ (".data.init")))

  注释:这个标志符和变量声明放在一起,表示gcc编译器在编译的时候需要把这个变量放在.data.init section中,而这个section在内核完成初始化之后,会被释放掉。

  举例:static struct kernel_param raw_params[] __initdata = {....}

  3) __initfunc()

  位置:include\asm-i386\Init.h

  定义: #define __initfunc(__arginit) \

  __arginit __init. \

  __arginit

  注释: 这个宏用来定义一个 __init 函数。

  举例: __initfunc(void mem_init(unsigned long start_mem, unsigned long e

  nd_mem)) {....}

  4) asmlinkage

  位置:Include\linux\linkage.h

  定义:#define asmlinkage CPP_ASMLINKAGE __attribute__((regparm(0)))

  注释:这个标志符和函数声明放在一起,告诉gcc编译器该函数不需要通过任何寄存器来传递参数,参数只是通过堆栈来传递。


相关文章


理解Linux的处理器负载均值Linux认证考试
ubuntu开启数字键Linux认证考试
Linux进程调度时机Linux认证考试
lowlevel_init.S注解Linux认证考试
linux内核源码中常见宏标志tagLinux认证考试
Linux下ELF文件加密工具Linux认证考试
编写模块遍历系统中的进程Linux认证考试
Linux系统中一些针对文件系统的节能技巧Linux认证考试
Linux高精确的时序(sleep,usleep,nanosleep)Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛