处于初期技术人员,故只转载,而没有动笔写作,慢慢的就会自己去写一些的,前提是熟悉了这个行业,熟悉了这门技术之后,现在还是在不断的学习和探讨中。。。。。。
2013年(28)
分类: LINUX
2013-12-20 16:16:59
原文地址:跟踪系统调用之旅-续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中。
ext2_file_operations 变量定义在fs/ext2/file.c文件中,如下图
通过上面的层层分析,可以得出:generic_file_read 函数才是 ext2 层的真实入口。generic_file_read 函数定义在mm/filemap.c文件中。如下: