1. 日常接触
找一个字符设备进行挂载:
[root@/]# mount /dev/ttyS0 /tmp
mount: mounting /dev/ttyS0 on /tmp failed: Block device required
根据提示只能挂载块设备。
可以看到devtmpfs挂载点就是/dev
[root@/]# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 104.3M 64.8M 31.7M 67% /
devtmpfs 49.3M 0 49.3M 0% /dev
tmpfs 57.8M 0 57.8M 0% /dev/shm
tmpfs 57.8M 36.0K 57.8M 0% /tmp
tmpfs 57.8M 20.0K 57.8M 0% /run
根文件系统依赖/dev/mmcblk2p1,/dev设备文件系统依赖根文件系统“/”,怎么解决二者的相互依赖?
2. 前人经验:Linux文件系统(VFS+具体文件系统)
一、VFS对上层的目标。
谨记VFS目的:为进程提供统一的文件访问方式。
《Linux内核源代码情景分析》P421:
==================== include/linux/sched.h 277 277 ====================
277 struct task_struct {
. . . . . .
==================== include/linux/sched.h 375 378 ====================
375 /* filesystem information */
376 struct fs_struct *fs;
377 /* open file information */
378 struct files_struct *files;
. . . . . .
==================== include/linux/sched.h 397 397 ====================
397 };
该task_struct结构体由进程使用,在其中的fs_struct 、files_struct 两个结构体所使用的具体数据从VFS中获取,因此VFS为进程服务。
书籍对VFS讲解的切入角度:《Linux内核源代码情景分析》虚拟文件系统章节,从对上层接口提供的角度切入的。
二、VFS定义的对底层的规范。
对于用户空间提供的统一调用,VFS必须能获得对应真实文件系统的文件索引和文件操作接口。
- 真实文件系统的文件索引的解析?
- 真实文件系统的文件操作接口的获得?
书籍对VFS讲解的切入角度:《Linux内核设计与实现(原书第3版)》虚拟文件系统章节,从对底层接口提供的角度切入的。
三、特殊文件系统、设备文件系统、磁盘文件系统,这三类具体文件系统对VFS规范的实现。
2. 前人经验:Linux文件系统(VFS+具体文件系统)
-
VFS虚拟文件系统,让“一切皆文件”成为可能。
1.1 VFS的工作框架?
《Linux内核探秘深入解析文件系统和设备驱动的架构与设计》P13,VFS定义了几个重要的数据结构:dentry、inode、super_block。
《Linux内核探秘深入解析文件系统和设备驱动的架构与设计》P14,(1)super_block超级块结构给出了文件系统的全局信息。(2)super_block超级块结构包含了一些函数指针。
1.2. 如何把具体文件系统注册到VFS? -
文件系统是一类文件。
特殊文件系统,一类特殊文件。
设备文件系统,一类设备文件。
磁盘文件系统,一类磁盘文件。 -
一个文件系统的挂载 与 一类文件的注册。