免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7998 | 回复: 5
打印 上一主题 下一主题

LDD3之scull--从open系统调用到scull_open函数调用流程分析 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 16:13 |只看该作者 |倒序浏览
本帖的主要内容提供一个从系统调用open到内核中该文件实际的open方法的调用流程分析,基本上列出来从open系统调用到scull_open过程中调用的函数。
在这个过程中很多调用以及函数实现的细节还并不是很清楚。希望能够起到抛砖引玉的作用,大家一起交流,把这个调用流程丰富起来。

int open(const char *pathname, int flags, mode_t mode);  --系统调用
                            ||
                            \/
long sys_open(const char __user *filename, int flags, int mode)  -- fs/open.c
/*对应内核中的open接口函数*/
                            ||
                            \/
long do_sys_open(int dfd, const char __user *filename, int flags, int mode) --fs/open.c
/*用户空间的filename被拷贝到内核空间,获取当前可用的文件描述符*/
                            ||
                            \/
static struct file *do_filp_open(int dfd, const char *filename, int flags, int mode) --fs/open.c
                            ||
                            \/
int open_namei(int dfd, const char *pathname, int flag,
  int mode, struct nameidata *nd)
/*获取该文件对应的nameidata结构.该函数执行完毕,接着调用下面函数。这两个函数是顺序被do_filp_open调用*/
                            ||
                            \/
struct file *nameidata_to_filp(struct nameidata *nd, int flags) --fs/open.c
/*将nameidata 结构转换为打开的struct file结构*/
                            ||
                            \/
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
     int flags, struct file *f,
     int (*open)(struct inode *, struct file *)) --fs/open.c
                            ||
                            \/
f->f_op = fops_get(inode->i_fop);  --fs/open.c
/*这里将系统调用中需要对应打开文件对应到内核中的file_operations结构体获取到,然后根据其函数
指针就可以找到该结构体中对该种文件操作的所有方法。scull对应的结构体是在scull_init的时候向内
核注册的。
                            ||
                            \/
open = f->f_op->open;
open(inode, f);    --fs/open.c
/*以上两行代码分别完成了open系统调用时执行实际文件对应内核的open方法,即scull_open

[ 本帖最后由 Godbach 于 2008-11-26 16:45 编辑 ]

评分

参与人数 2可用积分 +45 收起 理由
bitmilong + 30 原创内容
dreamice + 15 原创内容

查看全部评分

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2008-11-26 18:15 |只看该作者
这个流程非常清晰,学习了。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-11-26 18:50 |只看该作者
原帖由 dreamice 于 2008-11-26 18:15 发表
这个流程非常清晰,学习了。


其实这只是个架子而已。我把函数调用流程列出来了,很多具体的东西都没有分析,主要是我的知识还不够深入啊。

等待大家来补充。

BTW,这个帖子给精华让我有点惭愧啊。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2008-11-26 21:33 |只看该作者
原帖由 Godbach 于 2008-11-26 18:50 发表


其实这只是个架子而已。我把函数调用流程列出来了,很多具体的东西都没有分析,主要是我的知识还不够深入啊。

等待大家来补充。

BTW,这个帖子给精华让我有点惭愧啊。


搭个清晰架子,这个可以帮助很多人深入学习。而这个搭架子的能力,也是很多人所欠缺的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2008-11-26 22:23 |只看该作者
原帖由 dreamice 于 2008-11-26 21:33 发表


搭个清晰架子,这个可以帮助很多人深入学习。而这个搭架子的能力,也是很多人所欠缺的。


希望能够逐渐的把这个架子给完善了。中间涉及到很多细节问题啊

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [报告]
发表于 2008-11-26 22:39 |只看该作者
原帖由 Godbach 于 2008-11-26 22:23 发表


希望能够逐渐的把这个架子给完善了。中间涉及到很多细节问题啊


希望后期,Godbach 兄能把这个完整的分析总结出来供大家分享,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP