虚拟文件系统

嵌入式学习Day3


1.虚拟文件系统简介

虚拟文件系统(VFS, Virtual File System),位于用户空间程序和底层具体的物理文件系统(如 ext2, ext3, FAT32, NTFS 等)之间,充当了一个抽象层。

在 Linux 中,VFS 提供了一套通用的文件系统接口。不管底层的硬件是普通的机械硬盘(ext3 格式)、老式的软盘(ext2 格式)、还是 U盘,VFS 都把它们抽象成了统一的“文件”。

2.VFS 带来的好处


3.write()调用的流程

当你在应用层写下了ret = write(fd, buf, len);其从应用层到物理介质的流程如下


4.文件系统的基本概念

4.1超级块 (Superblock)


4.1.1超级块结构体中重要的部分

  1. 文件系统基础属性
  1. 连接 VFS 其他三大对象的“枢纽”超级块是整个文件系统的源头,它通过指针连接着其他的核心结构:

  1. 操作方法的“接口表”
  1. 硬件层面的映射

  1. 状态维护与管理

4.2索引节点 (Inode)


4.2.1索引节点结构体中重要的部分

  1. 基础元数据 这些是平时用 ls -l 或 stat 命令看到的最直观的信息:
  1. i_nlink掌控文件生死

  1. 完美诠释“一切皆文件”的核心设计

如果你在写一个字符设备驱动(比如 V4L2 摄像头节点或某种传感器的控制节点 /dev/my_device),用户空间的程序之所以能像读写普通文件一样去操作你的硬件,就是因为 VFS 在打开这个设备文件时,会通过这个 inode 里的 i_cdev 指针,精准地路由到你注册在内核里的具体驱动代码。

  1. 建立联系的“纽带”

4.3目录项 (Dentry)


4.3.1目录项结构体中重要的部分

1.搭建“目录树”的结构基石

  1. 连接“名字”与“灵魂”的桥梁(核心绑定)

  1. 支撑“目录项高速缓存 (dcache)”的生命线(性能与内存管理)

4.4文件对象 (File)


4.4.1文件对象结构体中重要的部分

1. f_pos

2. *f_op


3. f_path


4. *private_data


5. f_flags 与 f_mode