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卡分区步骤
图中步骤解读如下:
执行解挂;
执行fdisk相关命令对sdcard-0重新分区;
选择分区数(本文只讨论TPSFS分区,所以此处选择1);
选择字节对齐;
选择0,表示选用所有剩余空间;
确定参数配置;
选择分区格式为TPSFS;
分区完成,可以看到SD卡分区完成,为TPSFS格式。
4)分区完成后执行sync命令将分区信息写入磁盘,完成分区。
5)重启开发板重新完成挂载后,可以看到当前SD卡在/media目录下已挂载设备,如图 2.4所示。
图 2.4 SD卡挂载显示
6)在SylixOS的shell中,执行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.c中halShellInit中调用API_TShellInit接口,该接口主要作用就是初始化tshell平台,包括初始化系统环境变量、初始化系统命令、初始化文件系统命令等。其中mkfs命令作为文件系统命令,就是调用__tshellFsCmdInit进行命令函数关联,该函数中通过调用API_TShellKeywordAdd向ttiny shell 系统添加一个关键字mkfs,同时将其与命令操作函数__tshellFsCmdMkfs关联起来,如图 4.1所示。
图 4.1 mkfs命令关联函数
这样,我们就可以通过mkfs进行相关文件系统的格式化操作了。
4.2 格式化命令操作函数流程简析
mkfs命令操作函数__tshellFsCmdMkfs,通过宏mkfs调用diskformat函数,该函数中主要执行以下任务:
判断当前是否有root权限,否则无法进行相关操作;
通过设备名打开设备,得到设备句柄;
通过句柄进行ioctl操作,根据FIODISKFORMAT命令进行对应的格式化操作;
格式化完成后,通过句柄进行ioctl操作,根据FIODISKSYNC命令进行对应的清空缓存操作;
通过句柄进行ioctl操作,根据FIODISKINIT命令进行重新初始化设备操作;
关闭设备。
5.格式化最终实现
本文主要讨论的是TPSFS文件系统格式化操作,在章节4.2第三步的ioctl操作最终就是调用的章节3中安装的TPSFS文件系统驱动函数Ioctl相关操作,识别FIODISKFORMAT命令,实现格式化操作。
6. 参考资料
1、《SylixOS应用开发手册》
2、《SylixOS分区教程》
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何处理SQL Server事务复制中的大事务操作
如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理、日志读取器代理和分发代理实现的。快照代理准备快照文件(其中包含了已发布表和数据库对象的架构和数据),然后将这些文件存储在快照文件夹中,并在分发服务器中的分发数据库中记录同步作业。 日志读取器代理监视为事务复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中,分发数据库的作用相当于一个可靠的存储-转发队列。 分发代理将快照文件夹中的初始快照文件和分发数据库表中的事务复制到订阅服务器中。 在发布服务器中所做的增量更改根据分发代理的计划流向订阅服务器,分发代理可以连续运行以尽量减少滞后时间,也可以按预定的时间间隔运行。对于推送订阅,分发代理在分发服务器上运行;对于请求订阅,分发代理在订阅服务器上运行。该代理将事务从分发数据库移动到订阅服务器中。 如果订阅被标记为需要验证,则分发代理还要检查发布服务器和订阅服务器中的数据是否匹配。 大事务同步延时处理方法 在transactional replication, 经常会遇到数据同步延迟的情况。有时候这...
- 下一篇
使用mail.rc快速配置linux发邮件服务
1.系统环境。 [root@web02~]#cat/etc/redhat-release CentOSrelease6.8(Final) [root@web02~]#uname-r 2.6.32-642.el6.x86_64 [root@web02~]#uname-m x86_64 2.通过修改配置文件/etc/mail.rc可以使用外部SMTP服务器,轻松实现linux发邮件功能。 [root@web02~]#tail/etc/mail.rc #ForLinuxandBSD,thisshouldbeset. setbsdcompat #sendmailconfig setfrom=user@foxmail.com setsmtp=smtp.qq.com setsmtp-auth-user=user@foxmail.com setsmtp-auth-password=xxxxxxxxxxxxxxx setsmtp-auth=login 注意:目前大部分的外部邮件服务使用第三方客户端时,都需要使用授权码,上面的smtp-auth-password使用的就是授权码,而不是邮件帐号的密码。...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,7,8上安装Nginx,支持https2.0的开启