文件系统设备:
使用4MB内存空间模拟真实的储存设备,rfsdevext_t 结构表示,保存了内存空间的地址和大小;
new_rfsdevext_mmblk 函数分配了一个内存空间,初始化了一个 rfsdevext_t 结构实例化变量;该结构的地址放在了device_t 结构的 dev_extdata 字段中;
(资料图片仅供参考)
rfs_entry 驱动函数放在驱动表中,文件系统程序才可以运行;函数实现了分配device_t 结构并进行初始化,调用rfs_set_device 函数实现设置文件系统类型以及设备名称;接着把设备加入到驱动程序中,向内和注册设备;
文件系统格式化:
格式化操作:在储存设备上创建文件系统;文件系统的超级块、建立用于管理储存设备的位图,最后建立根目录,这样才能最终实现在储存设备上创建文件系统;
建立超级块:
初始化超级块的数据结构,并把它写入到储存设备的第一块逻辑储存块;
create_superblk 函数:现在内存缓冲区中建立文件系统的超级块;调用 rfssublk_t_init 函数实现rfssublk_t 结构的指针指向缓冲区并初始化;最后调用wirte_rfsdevblk函数把内存缓冲区的数据写入到储存设备中;
write_rfsdevblk 函数中 先调用 ret_rfsdevblk 函数 根据块号 返回储存设备的块地址;接着复制数据到逻辑储存块;
建立位图:
位图:哪些逻辑储存块空闲,哪些被占用;
create_bitmap 建立位图函数:位图块的块号和储存介质的逻辑储存块总数,都保存在超级块中,要先获取超级块、然后读取逻辑储存块函数,把缓冲区中的数据写入到储存介质中的第bitmapblk个逻辑储存块中,即位图块中;然后释放逻辑块函数;
建立根目录:
根目录是一种文件,在这个逻辑储存块的首个512字节空间建立fimgrhd_t 结构,即文件管理头数据结构;还要把这个逻辑块的块号储存在超级块中的rfsdir_t 结构,同时修改该 rfsdir_t 结构中的文件名为 “/";
create_rootdir 建立根目录函数;首先,分配一块新的逻辑储存块。接着,设置超级块中的 rfsdir_t 结构中的名称以及类型和块号。然后设置文件管理头,由于根目录是目录文件,所以文件管理头的类型为 FMD_DIR_TYPE,表示文件数据存放的是目录结构。最后,回写对应的逻辑储存块即可。
串联:
rfs_fmat 函数,调用上述三个函数封装起来;
init_rfs函数调用 rfs_fmat函数;rfs_entry 函数最后调用init_rfs 函数;
后续更新:
测试文件系统: