推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
更多学习视频请关注 B 站:嵌入式Jerry
本文聚焦于 Linux 文件系统子系统中最常见、最具代表性的问题,涵盖从总体架构到关键结构体、再到实际实现与接口调用等方面。配合你构建的学习目录结构,形成有重点的掌握路径。
答:
通常可分为三层结构:
open/read/write/ioctl
等系统调用。file/inode/dentry/vfsmount
。register_filesystem()
接入 VFS。/proc
与 /sys
属于真实的文件系统吗?答:
它们属于 虚拟文件系统:
/proc
是 procfs
,用于展示进程/内存等信息;/sys
是 sysfs
,展示设备树状结构;file
、inode
、dentry
的职责分别是什么?结构体 | 角色说明 |
---|---|
file |
表示一次打开的文件,绑定 fd ,进程相关 |
inode |
表示实际的文件或目录对象 |
dentry |
表示路径项,是 name → inode 的映射缓存 |
它们组合构成了文件系统操作的核心三元组。
file
和 inode
有哪些区别?答:
open()
都会新建一个 file
结构体;file
可以共享同一个 inode
;file
是**“一次打开的视角”,inode
是“文件本体”**。open()
调用流程中都经过了哪些关键结构?答:
系统调用 sys_open()
最终会:
filename_lookup()
查找路径;dentry
;inode
;file
并返回 fd
。关键函数如 do_filp_open()
位于 fs/namei.c
。
read()
系统调用是如何到达实际驱动的?答:
read()
→ vfs_read()
→ 调用 file->f_op->read()
;
而 file_operations
是由具体文件系统(如 ext4)或驱动注册提供的。
项目 | ext4 | tmpfs |
---|---|---|
类型 | 持久化文件系统 | 内存文件系统 |
存储介质 | 块设备 | RAM |
使用场景 | 根文件系统 | /tmp 、/run |
答:
initramfs
是启动时挂载的初始根文件系统(内核内嵌的 CPIO 格式);rootfs
是一个逻辑挂载点,通常一开始挂载的是 initramfs
;答:
可使用 inotify 或 fanotify 接口:
inotify_add_watch()
添加监听;fsnotify()
分发事件;read()
等待事件发生。procfs
和 sysfs
是如何创建节点的?答:
proc_create()
/ proc_mkdir()
创建 procfs
节点;kobject_create_and_add()
/ device_create_file()
添加 sysfs
节点;dentry/inode
结构体。建议 | 说明 |
---|---|
优先掌握 VFS 三大结构体 | file 、inode 、dentry 是全局核心 |
结合实现与挂载机制 | 每种文件系统都有对应的注册、挂载路径 |
多读 namei.c / fs/*.c 源码 | 核心逻辑都集中在这里 |
关注 sysfs/procfs 实战用途 | debugfs/sysfs 在驱动调试中经常使用 |
推荐阅读:《Yocto项目实战教程:高效定制嵌入式Linux系统》
更多学习视频请关注 B 站:嵌入式Jerry