首页 > 代码库 > SylixOS中TPSFS格式化流程简析

SylixOS中TPSFS格式化流程简析

1.TPSFS简介

    TPSFS文件系统是一款掉电安全的文件系统,该系统是SylixOS内建文件系统(专利技术),该文件系统有如下特点:

  • 采用B+树存储文件数据,读取与定位速度快,空间管理效率高;

  • 对数据使用原子操作,掉电安全;

  • 64位文件系统,支持EP级别文件长度;

  • 大文件处理性能好;

  • 支持文件记录锁,可支持大型数据库;

  • 支持多块分配机制,提高了系统性能,使得分配器有了充足的优化空间;

  • 支持子目录可扩展性,使得在一个目录下可以创建无数多个子目录。

    TPSFS文件系统结构如图 1.1所示。

技术分享

1.1 TPSFS文件系统结构图

超级块是TPSFS的第一个块,其中记录了文件系统的基本信息,如:块大小、块数量、数据块位置、log块位置等。TPSFS中每个数据块都被记录在一个以inode块为根的B+树中。

超级块后是空间管理inode块,inode对应的B+树管理整个磁盘的空闲块,可以理解为将所有空闲块记录到空间管理inode形成一个大文件。与普通文件不同的是,空间管理inode B+树节点的key值为磁盘块区间的物理块号,而普通文件的key值为该块区间在文件中的偏移。

 

2. SD卡分区

1)以nuc970开发板为例,板子上电后,插上SD卡,显示SD卡信息,如图 2.1所示。

技术分享

2.1 SD卡信息显示

 

2)执行showmount命令查看当前挂载情况,在/dev/blk目录下挂载设备sdcard-0,其中/media/sacard0挂载的是/dev/blk/sdcard-0:0/media/sacard1挂载的是/dev/blk/sdcard-0:1,如图 2.2所示。

技术分享

2.2设备挂载情况

 

3)按如图 2.3所示步骤进行SD卡分区。

技术分享

2.3 SD卡分区步骤

图中步骤解读如下:

  1. 执行解挂;

  2. 执行fdisk相关命令对sdcard-0重新分区;

  3. 选择分区数(本文只讨论TPSFS分区,所以此处选择1);

  4. 选择字节对齐;

  5. 选择0,表示选用所有剩余空间;

  6. 确定参数配置;

  7. 选择分区格式为TPSFS

  8. 分区完成,可以看到SD卡分区完成,为TPSFS格式。

4)分区完成后执行sync命令将分区信息写入磁盘,完成分区。

5)重启开发板重新完成挂载后,可以看到当前SD卡在/media目录下已挂载设备,如图 2.4所示。

技术分享

2.4 SD卡挂载显示

6)在SylixOSshell中,执行mkfs sdcard0进行TPSFS分区格式化,如图 2.5所示。

技术分享

2.5 SD卡分区格式化结果

接下来,介绍SylixOS如何完成TPSFS文件系统的格式化。

3.TPSFS文件系统驱动安装

bspInit.c中,halDrvInit函数的主要作用就是初始化目标系统的静态驱动程序,其中,宏tpsFsDrv就是调用API_TpsFsDrvInstall接口安装TPSFS文件系统驱动程序,如图 3.1所示。

技术分享

3.1 TPSFS驱动安装

 

API_TpsFsDrvInstall接口主要实现了文件系统的打开、关闭、读写和Ioctl相关操作。最后调用__fsRegister注册该文件系统。

Ioctl相关操作中,可以识别FIODISKFORMAT命令进行卷格式化,具体实现逻辑如下:

1)检查是否为设备文件,否则返回错误,如图 3.2所示。

                                                                         技术分享

3.2检查是否为设备文件

2)检查是否该有正在工作的文件,如图 3.3所示。

                                                                           技术分享

3.3检查是否有正在工作的文件

3)卸载挂载的文件系统,如图 3.4所示。

                                                                           技术分享

3.4卸载文件系统

4)停止CACHE,并进行底层格式化(需判断当前分区是否为逻辑分区),如图 3.5所示。

               技术分享

3.5格式化

4.SD卡格式化命令

    4.1 格式化命令初始化

mkfs作为shell关键字,需要在系统shell初始化过程中进行操作函数关联。在bspInit.chalShellInit中调用API_TShellInit接口,该接口主要作用就是初始化tshell平台,包括初始化系统环境变量、初始化系统命令、初始化文件系统命令等。其中mkfs命令作为文件系统命令,就是调用__tshellFsCmdInit进行命令函数关联,该函数中通过调用API_TShellKeywordAddttiny shell 系统添加一个关键字mkfs,同时将其与命令操作函数__tshellFsCmdMkfs关联起来,如图 4.1所示。

    技术分享

4.1 mkfs命令关联函数

这样,我们就可以通过mkfs进行相关文件系统的格式化操作了。

    4.2 格式化命令操作函数流程简析

mkfs命令操作函数__tshellFsCmdMkfs,通过宏mkfs调用diskformat函数,该函数中主要执行以下任务:

  1. 判断当前是否有root权限,否则无法进行相关操作;

  2. 通过设备名打开设备,得到设备句柄;

  3. 通过句柄进行ioctl操作,根据FIODISKFORMAT命令进行对应的格式化操作;

  4. 格式化完成后,通过句柄进行ioctl操作,根据FIODISKSYNC命令进行对应的清空缓存操作;

  5. 通过句柄进行ioctl操作,根据FIODISKINIT命令进行重新初始化设备操作;

  6. 关闭设备。

5.格式化最终实现

本文主要讨论的是TPSFS文件系统格式化操作,在章节4.2第三步的ioctl操作最终就是调用的章节3中安装的TPSFS文件系统驱动函数Ioctl相关操作,识别FIODISKFORMAT命令,实现格式化操作。

 

 

6. 参考资料

1、《SylixOS应用开发手册》

2、《SylixOS分区教程》

本文出自 “11168899” 博客,请务必保留此出处http://11178899.blog.51cto.com/11168899/1905193

SylixOS中TPSFS格式化流程简析