Linux 内核源码分析---简单文件系统

顺序文件

debugfs 文件系统 允许只用几个函数调用,就实现一个双向的调试接口。

小的文件系统中的文件,通常用户层是 从头到尾顺序读取 的,其内容可能是遍历一些数据项创建的。
kprobe 机制包含了到上述 debugfs文件系统 的一个接口。一个顺序文件向用户层提供了所有注册的探测器。

顺序文件处理程序基本上,必须提供一个 struct file_operations 的实例,其中一些函数指针指向一些 seq_ 例程,这样就可以利用顺序文件的标准实现了。
在这里插入图片描述

唯一需要实现的方法是 open。实现该函数不需要多少工作量,简单的一行代码就可以将文件关联到顺序文件接口:
在这里插入图片描述
seq_open 建立顺序文件机制所需的数据结构,使用该指针建立了与 struct seq_file 的一个实例之间的关联, struct seq_file 中包含了顺序文件的状态信息:
在这里插入图片描述
从文件系统实现者的角度来看,最重要的成员是指针 op,它指向 seq_operations 的一个实例。这将通用的顺序文件实现与提供具体文件内容的例程关联起来。
在这里插入图片描述

使用 libfs 编写 FS

libfs 是一个库,提供了几个非常通用的标准例程,可用于创建服务于特定用途的小型文件系统。函数原型定义在<fs.h>中,没有<libfs.h>头文件! libfs 提供的例程通常带有前缀 simple_
使用 libfs 建立的虚拟文件系统,其文件和目录层次结构可使用 dentry 树 产生和遍历。

simple_dir_operations 数据结构
在这里插入图片描述
普通文件不能使用 libfs 的 file_operations 模板。至少要手工指定 readwriteopen 方法,这是必需的,read 负责从内核内存准备数据并将其复制到用户空间,而 write 可用于读取用户的输出并以一定方式应用它。文件系统还需要一个超级块。
libfs 提供了simple_fill_super方法,可用于填充给出的超级块:
在这里插入图片描述
一个 struct tree_descr 的数组用来描述初始的文件集合。
在这里插入图片描述

调试文件系统

使用了 libfs 函数的一个特别的文件系统是调试文件系统 debugfs。它向内核开发者提供了一种向用户层提供信息的可能方法。这些信息并不会编译到产品内核中。它只是开发新特性时的一种辅助手段。仅当内核编译时启用了 DEBUG_FS 配置选项,才会激活对 debugfs 的支持。
因而向 debugfs 注册文件的代码,都会被 C 预处理器条件语句包围,来检查 CONFIG_DEBUG_FS

编程接口:
由于debugfs代码非常干净、简单、文档情况良好,所以不必对其实现多加评注。只需讨论其编程接口就足够了。这是对 libfs 例程的非常好的应用。有3个函数可用于创建新的文件系统对象:
在这里插入图片描述

文件系统对象可以是普通文件、目录或符号链接。两个附加的操作可用于重命名和删除文件:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞大圣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值