8.6具体文件系统举例
如前所述,每种文件系统类型都有个file_system_type结构,而结构中的fs_flags则由各种标志位组成,这些标志位表明了具体文件系统类型的特性,也决定着这种文件系统的安装过程。以物理设备为基础的常规文件系统类型(如Ext2、Minix等),由用户进程通过系统调用mount()来安装,而有些没有物理设备对应的文件系统(如pipe、共享内存区等),由内核通过kern_mount()来安装。
内核代码中提供了两个用来建立file_system_type结构的宏,其定义在fs.h中:
#define DECLARE_FSTYPE(var,type,read,flags) \
struct file_system_type var = { \
name: type, \
read_super: read, \
fs_flags: flags, \
owner: THIS_MODULE, \
}
#define DECLARE_FSTYPE_DEV(var,type,read) \
DECLARE_FSTYPE(var,type,read,FS_REQUIRES_DEV)
一般常规的文件系统类型都通过DECLARE_FSTYPE_DEV建立其结构,因为它们的FS_REQUIRES_DEV标志位为1,而其他标志位为0。相比之下,特殊的、虚拟的文件系统类型大多直接通过DECLARE_FSTYPE建立其结构,因为它们的fs_flags是特殊的。