Linux内核文件系统-ext2文件系统-开发一个新文件系统的步骤

建议点击这里查看个人主页上的最新原文

一般的Linux书籍都是先讲解进程和内存相关的知识,但我想先讲解文件系统。

第一,因为我就是做文件系统的,更擅长这一块,其他模块的内容我还要再去好好看看书,毕竟不能误人子弟嘛;第二,是

因为文件系统模块更接近于用户态,是相对比较好理解的内容(当然想深入还是要下大功夫的),由文件系统入手比较适合初学者。

英文全称Extended file system,翻译为扩展文件系统。Linux内核最开始用的是minix文件系统,直到1992年4月,Rémy Card开发了ext文件系统,采用Unix文件系统(UFS)的元数据结构,在linux内核0.96c版中引入。设计上参考了BSD的快速文件系统(Fast File System,简称FFS)。1993年1月0.99版本中ext2合入内核, 2001年11月2.4.15版本中ext3合入内核,2006年10月10日2.6.19版本中ext4合入内核。

相关文档网站:

以ext2为例,说明开发一个新文件系统所需的步骤,也可以作为学习一个文件系统的方法步骤。

  1. 定义超级块结构。
  • 磁盘超级块结构struct ext2_super_block,在struct file_system_type ext2_fs_type.mount实现ext2_mount()里调用到的ext2_fill_super()中找。
  • 内存超级块结构struct ext2_sb_info,赋值给struct super_blocks_fs_info成员。
  1. 实现超级块操作方法ext2_sops
  2. 定义索引节点结构。
  • 磁盘索引节点结构struct ext2_inode,在超级块操作方法ext2_sops.write_inode实现函数中找。
  • 内存索引节点结构struct ext2_inode_info,内嵌struct inode,在超级块操作方法ext2_sops的很多函数都可以找到。
  1. 实现各种类型文件的索引节点操作方法:
  • 常规文件ext2_file_inode_operations
  • 目录ext2_dir_inode_operations
  • 快速符号链接(路径名小于60字节)ext2_fast_symlink_inode_operations
  • 普通符号链接(路径名大于60字节)ext2_symlink_inode_operations
  • 其他ext2_special_inode_operations
  1. 实现dentry操作方法,ext和xfs等文件系统都没定义,nfs为nfs_dentry_operationsnfs4_dentry_operations,smb client为cifs_dentry_opscifs_ci_dentry_ops
  2. 实现各种类型文件的file操作方法:
  • 常规文件ext2_file_operations
  • 目录ext2_dir_operations
  • 其他类型查看init_special_inode()函数。
  1. 实现各种类型文件的address_space操作方法:
  • 常规文件ext2_aopsext2_dax_aops
  • 目录,ext2没定义目录相关的操作,nfs为nfs_dir_aops
  • 其他类型,如块设备def_blk_aops
  1. 定义文件系统类型ext2_fs_type
  2. 模块加载卸载方法,init_ext2_fsexit_ext2_fs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值