文件系统子系统 · 核心问题问答精要


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统
🎥 更多学习视频请关注 B 站:嵌入式Jerry



📚 文件系统子系统 · 核心问题问答精要

📌 本文聚焦于 Linux 文件系统子系统中最常见、最具代表性的问题,涵盖从总体架构到关键结构体、再到实际实现与接口调用等方面。配合你构建的学习目录结构,形成有重点的掌握路径。


🔶 一、总体架构理解类

在这里插入图片描述

❓1. Linux 文件系统的整体结构如何划分?

答:
通常可分为三层结构:

  • 应用层接口:如 open/read/write/ioctl 等系统调用。
  • VFS 抽象层:内核统一接口层,结构体如 file/inode/dentry/vfsmount
  • 具体实现层:ext4、tmpfs、procfs、sysfs 等文件系统,通过 register_filesystem() 接入 VFS。

❓2. /proc/sys 属于真实的文件系统吗?

答:
它们属于 虚拟文件系统

  • /procprocfs,用于展示进程/内存等信息;
  • /syssysfs,展示设备树状结构;
    它们没有落盘数据,不存在真实的块设备,只是在内存中由内核生成。

🔷 二、关键结构体与接口理解

❓3. fileinodedentry 的职责分别是什么?

结构体角色说明
file表示一次打开的文件,绑定 fd,进程相关
inode表示实际的文件或目录对象
dentry表示路径项,是 name → inode 的映射缓存

它们组合构成了文件系统操作的核心三元组。


❓4. 一个文件被打开两次,fileinode 有哪些区别?

答:

  • 每次 open() 都会新建一个 file 结构体;
  • 但多个 file 可以共享同一个 inode
  • file 是**“一次打开的视角”inode“文件本体”**。

🟦 三、系统调用与路径解析类

❓5. open() 调用流程中都经过了哪些关键结构?

答:
系统调用 sys_open() 最终会:

  1. 通过 filename_lookup() 查找路径;
  2. 得到 dentry
  3. 拿到 inode
  4. 创建 file 并返回 fd

关键函数如 do_filp_open() 位于 fs/namei.c


❓6. read() 系统调用是如何到达实际驱动的?

答:
read()vfs_read() → 调用 file->f_op->read()
file_operations 是由具体文件系统(如 ext4)或驱动注册提供的。


🟩 四、文件系统实现类

❓7. ext4 与 tmpfs 最大区别是什么?

项目ext4tmpfs
类型持久化文件系统内存文件系统
存储介质块设备RAM
使用场景根文件系统/tmp/run

❓8. rootfs 和 initramfs 的区别与联系?

答:

  • initramfs启动时挂载的初始根文件系统(内核内嵌的 CPIO 格式);
  • rootfs 是一个逻辑挂载点,通常一开始挂载的是 initramfs
  • 后续会切换成实际的根文件系统(如 ext4)。

🟥 五、调试与通知机制类

❓9. 如何监控一个文件是否被修改?

答:
可使用 inotify 或 fanotify 接口:

  • inotify_add_watch() 添加监听;
  • 内核通过 VFS 中的 fsnotify() 分发事件;
  • 用户态使用 read() 等待事件发生。

❓10. procfssysfs 是如何创建节点的?

答:

  • 使用内核 API 如 proc_create() / proc_mkdir() 创建 procfs 节点;
  • 使用 kobject_create_and_add() / device_create_file() 添加 sysfs 节点;
  • 它们背后本质是操作 VFS 中的 dentry/inode 结构体。

✅ 总结建议

建议说明
🔹 优先掌握 VFS 三大结构体fileinodedentry 是全局核心
🔹 结合实现与挂载机制每种文件系统都有对应的注册、挂载路径
🔹 多读 namei.c / fs/*.c 源码核心逻辑都集中在这里
🔹 关注 sysfs/procfs 实战用途debugfs/sysfs 在驱动调试中经常使用


📖 推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统
🎥 更多学习视频请关注 B 站:嵌入式Jerry


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值