数码资讯
Linux内核源代码中常见的宏标记
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
这其中包括__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_(。附表。文本)))))
参考:
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_(。附表。文本)))))
参考:
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。