这其中包括__init,__initdata,__initfunc(),asmlinkage,输入(),快速调用()等。它们的定义主要有includelinuxlinkage。H和includeasm-i386init。H,以及一些其他的.h文件。



1)__init地点:includeasm-i386init。H



定义:定义__init # __attribute__((__section__(。文字。init))))



注:此标识符和函数声明放在一起,表明GCC编译器需要把这个功能in.text.init截面时,编译,和部分将在内核初始化发布。



例如:asmlinkage __init start_kernel虚空(void){…}



2)__initdata



地点:includeasm-i386init。H



定义:定义__initdata # __attribute__((__section__(。数据。init))))



注:此标识符和变量声明放在一起,表明GCC编译器需要将变量in.data.init截面时,编译,和部分将在内核初始化发布。



例如:静态结构kernel_param raw_params { } = {基地__initdata…



3)__initfunc()



地点:includeasm-i386init。H



定义:定义__initfunc #(__arginit)



__arginit __init;



__arginit



注意:这个宏用来定义一个__init功能。



例如:__initfunc(void mem_init(无符号长整型start_mem,E)



nd_mem)){基地…



4)asmlinkage



地点:includelinuxlinkage。H



定义:定义asmlinkage # cpp_asmlinkage __attribute__((regparm(0)))



注意:标识符和函数声明放在一起,这告诉GCC编译器,这个函数不需要通过任何寄存器传递参数,并且参数是通过堆栈传递的。



例如:asmlinkage __init start_kernel虚空(void){…}



5)条目()



地点:includelinuxlinkage。H



定义:#定义条目(名称)



全球symbol_name(名字);



排列;



symbol_name_label(名称)



注意:该名称被声明为全局的、对齐的,并定义为符号。



例如:输入(swapper_pg_dir)



长0x00102007。



填__user_pgd_ptrs-1,4,0。



默认值:767个条目



长0x00102007。



默认值:255个条目



填__kernel_pgd_ptrs-1,4,0。



相当于



全球swapper_pg_dir。



对齐16,0x90。



如果i486 / * * /



swapper_pg_dir:



长0x00102007。



填__user_pgd_ptrs-1,4,0。



默认值:767个条目



长0x00102007。



默认值:255个条目



填__kernel_pgd_ptrs-1,4,0。



6)快速调用()



地点:includelinuxkernel。H



定义:定义# fastcall(x)x __attribute__((regparm(3)))



注意:标识符和函数声明放在一起。与regparm财产申报(3)告诉GCC编译器的功能可以通过多达3个参数通过登记,和3个寄存器EAX,EDX和ECX顺序。更多的参数通过堆栈传递。这可以减少大量的堆栈出栈操作,所以叫快。



例如:extern void fastcall(__switch_to(struct task_struct *昨日,struct T)



ask_struct *下))



在这个例子中,沪指将通过EDX通过eax和下



7)_sched存在于内核/附表。h文件



附加到任何功能,应在wchan输出忽略



#定义_sched _attribute_((_section_(。附表。文本)))))



参考: