1,基本结构体的作用:
Struct | Description |
struct fat_boot_sector | Boot sector |
Struct fat_boot_fsinfo | Fsinfo信息 |
struct msdos_dir_entry | 表示目录项,短文件名 |
struct msdos_dir_slot | 表示长文件名 |
struct fat_slot_info | 目录下目录项信息 |
struct fat_entry | 表示fat表项 |
struct msdos_sb_info | Super block |
struct fat_mount_options | Mount 选项 |
struct msdos_inode_info | Fat filesystem对应的inode信息 |
struct fat_cache | Fat_cache |
struct fat_cache_id | 用于保持在链表中找到的离fclus最近的一个fat_cache的信息 |
2,FAT文件系统的注册
kernel中fat的初始化是在Namei_vfat.c文件中的init_vfat_fs()函数,该函数用于注册fat文件系统。
1075 static struct file_system_type vfat_fs_type = {
1076 .owner = THIS_MODULE,
1077 .name = "vfat",
1078 .mount = vfat_mount,
1079 .kill_sb = kill_block_super,
1080 .fs_flags = FS_REQUIRES_DEV,
1081 };
3,vfat_mount()函数的流程
1,分配一个VFS层的super_block()结构体并对其各项成员进行赋值,super_block->s_fs_info指向fat文件系统本身的super_block msdos_sb_info结构体,对于fat文件系统,从设备读取第一个逻辑sector的内容,作必要的参数检查并提取必要的有用信息,如果文件系统boot_sector结构体里记录的sector大小比块设备的block大小还大的话,那么将文件系统sector的大小赋值给块设备block。
2,fat_inode=new_inode(sb)函数,调用该super_block的操作函数分配一个新的inode并将其加到全局链表里
3,分配一个root_inode结构体,然后调用fat_read_root(root_inode)函数对root_inode结构体相关成员赋值,比如会根据mount时候的uid gid选项对inode的uid和gid成员赋值,然后对inode操作函数进行赋值,最后调用d_make_root(root_inode)函数创建fat32文件系统的根目录,建立dentry和inode的联系。