Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6318242
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2013-11-20 12:31:56

原文地址:跟踪系统调用之旅-续1 作者:woaimaidong

   本该定于周六的时候,分享这篇博文。怎奈双十一定了好多书,周五晚上到的,周六的时候在家全天充电。所以只好今天分享。各位还记得上篇博文有一问题:file->f_op_read指向的函数是哪个?

带着这个问题我们继续:

文件系统(每个注册的文件系统)在内核中用一个类型为file_system_type的结构表示,当开机加载文件系统模块时,内核使用module_init(init_ext2_fs),初始化模块,具体位置在fs/ext2/super.c文件中,如下:
                   

在函数init_ext2_fs()中,通过调用register_filesystem()注册ext2_fs_type,即将ext2_fs_type加入到文件系统的链表中。
                  

看一下ext2_fs_type
                  

其中的字段get_sb 就是读超级快的函数。

                                         
                                         
                                         
                                        
                                       
 ext2_read_inode函数在文件fs/ext2/inode.c中。
                                       
                                       

          S_ISREG是否是一个常规文件,如果是常规文件,则将ext2_file_operations 变量的地址赋予
inode 对象的 i_fop 成员,那么inode->i_fop.read 函数指针所指向的函数,也就是ext2_file_operations
变量的成员 read 所指向的函数。
         

    ext2_file_operations 变量定义在fs/ext2/file.c文件中,如下图
               

    通过上面的层层分析,可以得出:generic_file_read 函数才是 ext2 层的真实入口。generic_file_read 函数定义在mm/filemap.c文件中。如下:
                








阅读(1316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~