首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>桌面应用>正文

Linux i386+源码中常见宏标识tag的定义

http://www.oklinux.cn  2007-05-21  来源: 赛迪网 little  会员收藏  游客收藏  【 】 

这些宏包括 __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编译器该函数不需要通过任何寄存器来传递参数,参数只是通过堆栈来传递。

 

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

 

5) ENTRY()

 

位置:Include\linux\linkage.h

 

定义: #define ENTRY(name) \

.globl SYMBOL_NAME(name); \

ALIGN; \

SYMBOL_NAME_LABEL(name)

 

注释: 将name声明为全局,对齐,并定义为标号。

 

举例: ENTRY(swapper_pg_dir)

.long 0x00102007

.fill __USER_PGD_PTRS-1,4,0

/* default: 767 entries */

.long 0x00102007

/* default: 255 entries */

.fill __KERNEL_PGD_PTRS-1,4,0

等价于

.globl swapper_pg_dir

.align 16,0x90

/* if i486+ */

swapper_pg_dir:

.long 0x00102007

.fill __USER_PGD_PTRS-1,4,0

/* default: 767 entries */

.long 0x00102007

/* default: 255 entries */

.fill __KERNEL_PGD_PTRS-1,4,0

 

6) FASTCALL()

 

位置:Include\linux\kernel.h

 

定义:#define FASTCALL(x) x __attribute__((regparm(3)))

 

注释:这个标志符和函数声明放在一起,带regparm(3)的属性声明告诉gcc编译器这个函数可以通过寄存器传递多达3个的参数,这3个寄存器依次为EAX、EDX 和 ECX。更多的参数才通过堆栈传递。这样可以减少一些入栈出栈操作,因此调用比较快。

 

举例:extern void FASTCALL(__switch_to(struct task_struct *prev, struct t

ask_struct *next));

 

这个例子中,prev将通过eax,next通过edx传递。


上一篇:Linux系统用户User和用户组Group的管理   下一篇:倪光南:微软称开源软件侵权是市场战略


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·当“菜鸟”遭遇Linux
·Linux环境下 用XMMS听MP3
·SFU让Windows与Linux资源互用
·在Linux下管理磁盘
·Linux下视像与音频新体验
·企鹅也疯狂:Linux下常用的聊天工具
·用VMWare虚拟机同时运行多操作系统
·Office Linux:这才是我们需要的
·如何在Linux下使用千兆网卡
·让“猫”跑在Linux上
·扬帆工程开发项目优化Linux桌面
·扬帆桌面平台.0的系统新特性
·Linux桌面系统 扬帆.0“中软”版
·Linux操作系统用户专用反病毒软件将面世
·汉杰办公2.0享受Linux环境下办公乐趣
·冲击微软 即时低价出售两款Linux产品
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Wine 1.0发布日期已定!
·GNOME 2.22正式发布!
·在GNOME中使用Global Menu
·Ubuntu Tweak 0.2.10发布:增加脚本管
·译文:GNOME的第一个十年
·KDE 4.1 Rev 783000截图欣赏
·Fedora 9:集最新技术于一身
·Ubuntu 8.04 Hardy Heron Alpha 6:活
·Fedora 8中yum设置的点点滴滴
·Compiz Fusion 0.7.2发布
·“Lenny”将成为Debian 5.0
·Fedora 9:掌管你所有的连接
  阅读排行
·Ubuntu多媒体播放器的安装与配置
·菜鸟也疯狂:Linux桌面应用全攻略
·Slackware 10 系统的汉化、美化
·以假乱真 Linux中实现Vista界面主题
·Ubuntu系统的中文化与输入法
·用新型D-BUS与Linux桌面应用程序通讯
·在Linux下管理磁盘
·Linux操作系统桌面的汉字输入介绍
·Linux系统下用DCOP连接KDE应用程序
·如何安装和使用wine
·安装Sony VAIO和HP Pavilion本本内置摄
·Zaurus 引领嵌入式 Linux
·Linux下 Firefox 2.0的安装(Ubuntu Dap
·降低接入Internet成本 校园网应用Linux
·用rtorrent下载bt
网摘收藏: