从零到壹嵌入式Linux编程实战教程课:第 13 课 文件系统子系统(VFS)模块二:内核核心机制
文章目录一、课程目标二、VFS 虚拟文件系统概述三、Linux 文件系统整体层次架构四、VFS 四大核心数据结构4\.1 超级块 super\_block4\.2 索引节点 inode4\.3 目录项 dentry4\.4 文件结构体 file五、文件描述符与打开流程5\.1 文件描述符 fd5\.2 文件打开完整流程六、路径解析与目录缓存机制七、常见 Linux 文件系统类型八、实战示例代码示例 1:用户态文件读写(标准 VFS 调用流程)示例 2:内核态遍历当前进程文件信息九、课堂练习十、课后作业十一、核心关键词课程回顾总结上一课作业答案 内存管理子系统 \(MMU\) 实战作业代码代码功能说明注意事项本章系统讲解 Linux 文件系统子系统 VFS 核心机制,阐明 VFS 作为虚拟抽象层,对上提供统一系统调用、对下适配各类物理与虚拟文件系统的核心设计思想。重点讲解超级块、inode、dentry、file 四大核心结构体,理清文件系统、文件元数据、目录映射、进程打开文件的内核表示关系。梳理文件描述符分配、文件打开、路径解析、目录缓存的完整底层流程,区分 Ext4、Tmpfs、Procfs、Sysfs 等常用文件系统特性与应用场景。通过用户态文件读写、内核态查看进程文件对象两段示例代码,打通应用层操作与内核 VFS 底层实现的对应关系。掌握本章内容,可深刻理解 Linux 一切皆文件的设计理念,为后续设备驱动开发、虚拟文件系统开发、嵌入式根文件系统裁剪奠定坚实基础。一、课程目标理解 Linux VFS 虚拟文件系统的作用、架构层次与设计思想掌握 VFS 四大核心对象:超级块、inode、dentry、文件结构体理解通用文件操作接口、系统调用与 VFS 层转发机制掌握普通文件、设备文件、管道、proc、sysfs 在内核中的统一管理方式理解文件系统挂载、卸载、路径解析底层流程能通过用户态、内核态代码理解文件读写流程,为驱动设备文件开发打基础二、VFS 虚拟文件系统概述VFS(Virtual File System,虚拟文件系统)是 Linux 内核为兼容各类异构文件系统而设计的一层通用抽象接口。Linux 支持 Ext2/Ext3/Ext4、FAT32、NTFS、Tmpfs、Ramfs、Procfs、Sysfs 等多种文件系统,VFS 对上提供统一系统调用接口,对下适配不同硬件与具体文件系统,实现一套接口、适配所有文件系统。VFS 核心价值:应用层无需关心底层具体文件系统类型内核统一管理磁盘文件、设备文件、管道、虚拟文件标准化文件读写、打开、关闭、权限检测流程三、Linux 文件系统整体层次架构从上至下分为四层:用户层:应用程序、Shell、标准库系统调用层:open、read、write、close、lseekVFS 虚拟文件系统层:统一抽象、通用对象、通用操作接口具体文件系统层:Ext4、FAT32、Tmpfs、Procfs、设备驱动文件层所有文件操作都会先进入 VFS,再由 VFS 转发给底层真实文件系统或设备驱动。四、VFS 四大核心数据结构4.1 超级块 super_block代表整个文件系统实例,挂载一个分区就对应一个超级块。记录内容:文件系统类型、总大小、空闲块、挂载点、操作函数集。4.2 索引节点 inode代表一个实际文件 / 目录的底层元数据。不包含文件名,只记录:文件大小、权限、时间戳、磁盘块指针、文件类型。4.3 目录项 dentry目录项,负责文件名与 inode 映射,缓存目录路径,加速路径查找。作用:路径解析缓存、减少磁盘 IO、提升文件访问速度。4.4 文件结构体 file进程打开文件后在内核中的表示。记录:文件偏移量、打开模式、所属 inode、文件操作函数指针。每个进程的 fd 文件描述符,本质就是 file 结构体数组下标。五、文件描述符与打开流程5.1 文件描述符 fd每个进程拥有独立文件描述符表0:标准输入 1:标准输出 2:标准错误后续打开文件从小到大分配 fd 编号5.2 文件打开完整流程用户态调用 open () 系统调用进入内核 sys_open,交由 VFS 处理VFS 逐层解析路径名,查找 dentry、匹配 inode检查访问权限、文件存在性分配 file 结构体、挂载文件操作接口分配 fd,返回给用户态后续 read/write 通过 fd 找到 file → inode → 底层读写接口六、路径解析与目录缓存机制路径解析:从根目录开始,逐级拆分路径每一层目录名称,依靠 dentry 缓存快速找到对应 inode,最终定位目标文件。dentry 缓存优点:常用目录路径常驻内存避免每次都读取磁盘目录块大幅提升文件访问性能七、常见 Linux 文件系统类型Ext4:系统主文件系统,日志型、稳定、支持大文件Tmpfs:内存文件系统,断电丢失,速度极快Procfs:进程虚拟文件系统,/proc 查看进程、内核参数Sysfs:设备模型文件系统,/sys 展示总线、设备、驱动FAT32:U 盘、SD 卡常用,兼容性强Devtmpfs:/dev 设备文件自动生成八、实战示例代码示例 1:用户态文件读写(标准 VFS 调用流程)#includestdio.h#includeunistd.h#includefcntl.h#includestring.hintmain(void){int