设为首页 加入收藏

TOP

Linux Kernel代码艺术——系统调用宏定义
2015-02-02 14:36:57 来源: 作者: 【 】 浏览:8
Tags:Linux Kernel 代码 艺术 系统 调用 定义

我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量、宏、函数等的定义处。但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数名的特点是sys_×××,例如我们想找open函数的内核系统调用代码,在SI提供的符号表中搜索sys_open,能找到函数的声明:


原本SI提供从函数名按住Ctrl单击鼠标左键能跳转到定义处的功能,但运用在系统调用函数sys_open上却失败了,这是什么回事呢?


经过分析,原来内核中系统调用采用了宏定义,如这里的sys_open就被定义为:


可以猜测出这个宏定义展开之后就是上面函数声明那样的,难怪SI不能跳转到系统调用的定义处呢!


下面以open系统调用为例分析这个宏是如何展开的:


首先在?include/linux/syscall.h?中有下面这样的宏定义:


针对这个宏定义有几点说明:


那么:


这里?__VA_ARGS__?是?const char __user *, filename, int, flags, umode_t, mode,而同样__SC_DECL3?又是一组宏定义:


这样,一步一步地展开:


最终:


正如我们之前猜测的那样。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux Core Dump 下一篇Python 数据类型及其用法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: