【STM32F429】第2章 ThreadX FileX文件系统介绍

论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=100749

第2章   ThreadX FileX文件系统介绍

本章节介绍 ThreadX FileX文件系统,让大家对 ThreadX FileX有一个整体的了解。

2.1 初学者重要提示

2.2 Express Logic公司介绍

2.3 ThreadX FileX简介

2.4 ThreadX FileX高级特性

2.5 ThreadX各行各业应用案例

2.6 ThreadX论坛

2.7 总结

 

 

2.1   初学者重要提示

  1.   ThreadX是小型RTOS的巅峰之作,通过了各行各业的安全认证,并且大部分都是最高安全标准。作为中间件的FileX文件系统也通过了各种安全认证。

2.2   Express Logic公司介绍

ThreadX的作者是William lamie(同样是Nucleus RTOS的原始作者,于1990年发布)。1996的时候成立了Express Logic,并于1997发布首版ThreadX RTOS。

  •   ThreadX4发布于2001年,ThreadX5发布于2005年,ThreadX6发布于2020年。
  •   FileX – ThreadX的嵌入式文件系统于1999年发布首版。
  •   NetX – ThreadX的嵌入式TCP / IP网络协议栈于2002年发布首版。
  •   USBX – ThreadX的嵌入式USB协议栈于2004年发布首版。
  •   2009年推出了适用于SMP多核环境的ThreadX。
  •   2011年发布支持动态应用加载的ThreadX Modules。
  •   GUIX – ThreadX的嵌入式UI于2014年发布首版。
  •   Microsoft在2019年4月18日以未公开的价格购买了Express Logic。

2.2.1  ThreadX内核

ThreadX几乎是小型RTOS的巅峰之作,不管你之前用的那个OS,如果有精力建议还是学习下。62亿电子设备采用,是其它RTOS无法逾越的高山。ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。

 

ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。这么多安全认证,公司要入大量财力,人力和物力才可以完成,早前Micrium的一篇文章还谈过这个问题,投入了太多资金和人力了,还与风河的VxWorks做了简单对比。

(1)医疗 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971

(2)工业 - UL-1998,IEC-61508 SIL 4

(3)运输/铁路 - EN50128 SIL 4,BS50128,  49CFR236,IEC-61508

(4)航空航天设备 - DO-178B,ED-12B,DO-278

(5)汽车    - IEC-61508 ASIL D

(6)核应用 - IEC-61508

(7)家电   - UL/IEC 60730/60335

规格如下:

 

2.2.2  NetX网络协议栈

ThreadX的网络协议栈对其它网络协议栈几乎是碾压性优势。一张图,几乎涵盖了我们日常项目大部分应用:

 

各个行业的安全认证:

 

物联网协议方向安全认证:

 

加密库也做了认证:

 

2.2.3  USBX协议栈

USB协议栈也不错,日常用的功能也齐全

 

规格如下:

 

2.2.4  GUIX图形界面

GUIX用于图形界面设计,功能强劲,特别是配套的图形界面开发软件GUIX Studio,可以添加设置各种主题,各种界面效果,各种字体展示,各种图片格式设置,真的是一条龙,非常方便。而且GUIX有各种安全认证。

GUIX通过了医疗认证IEC-62304 Class C,汽车认证IEC-61508 ASIL D,工业认证IEC-61508 SIL 4和运输/铁路认证EN50128,表明GUIX可用于安全关键型系统。

 

规格如下:

 

2.2.5  LevelX擦写均衡保护层

LevelX为NAND和NOR型Flash提供擦写均衡支持,并且对于NAND型,还支持ECC校验和坏块管理。

由于NAND和NOR型Flash擦除次数是有限的,因此均匀分配闪存使用至关重要。这通常称为擦写均衡,LevelX为此而生。LevelX向用户提供一个逻辑扇区阵列,这些逻辑扇区映射到LevelX内部的物理闪存。应用程序可以将LevelX与FileX结合使用,也可以直接读取/写入逻辑扇区。LevelX专为容错而设计。Flash更新是分多个步骤进行的,每个步骤都可以中断。在下一次操作期间,LevelX自动恢复到最佳状态。

2.3   ThreadX FileX简介

FileX嵌入式文件系统是针对Microsoft FAT文件格式的高级工业级解决方案,专门针对深度嵌入式,实时和物联网应用程序而设计。FileX支持Microsoft的所有文件格式,包括FAT12,FAT16,FAT32和exFAT。FileX还通过LevelX的提供了可选的容错能力和FLASH磨损均衡。并且空间需求小,执行速度快和易于使用,使FileX成为要求最苛刻的嵌入式IoT应用程序的理想选择。

2.3.1  内存需求

FileX嵌入式文件系统的最小占用空间非常小,只有8.6 KB到12 KB,可支持基本文件读/写。一个实例的最小FileX RAM使用量约为1.8 KB,并且只有512字节的逻辑扇区缓存。与ThreadX一样,FileX的大小会根据应用程序使用的服务自动裁剪。这实际上消除了对复杂配置的需要,并且无需构建参数,从而使开发人员更轻松。

2.3.2  功能介绍

FileX基本功能介绍如下:

  媒介服务

  •   支持FAT 12/16/32和exFAT。
  •   最小6KB闪存,2.5KB RAM。
  •   完整的媒体访问服务。
  •   不限制例化的设备数。
  •   简单的读/写逻辑扇区驱动接口函数。
  •   多分区支持。
  •   逻辑扇区缓存。
  •   FAT条目缓存。
  •   可选的容错支持。
  •   延迟辅助FAT更新(secondary FAT)
  •   通过TraceX进行系统级跟踪。
  •   API包括:

fx_media_open

fx_media_close

fx_media_format

fx_media_space_available

 

  目录功能

  •   路径支持256字节。
  •   支持长目录名和8.3格式短目录。
  •   目录创建和删除。
  •   目录导航和遍历。
  •   目录属性管理。
  •   通过TraceX进行系统级跟踪。
  •   API包括:

fx_directory_create

fx_directory_delete

fx_directory_attributes_set

fx_directory_attributes_read

fx_directory_first_entry_find

fx_directory_next_entry_find

 

  文件功能

  •   最小3.3KB Flash。
  •   打开文件数不限。
  •   只读文件可以多次打开。
  •   支持长文件名和8.3短文件名。
  •   连续文件支持(文件访问的时间确定性)。
  •   快速搜寻逻辑。
  •   簇的预分配。
  •   文件创建,删除和重命名。
  •   文件读取,写入和查看。
  •   文件属性管理。
  •   通过TraceX进行系统级跟踪
  •   API包括:

fx_file_create

fx_file_delete

fx_file_attributes_set

fx_file_attributes_read

fx_file_read

fx_file_seek

fx_file_write

 

  文件功能

  •   最小3.3KB Flash。
  •   打开文件数不限。
  •   只读文件可以多次打开。
  •   支持长目录名和8.3目录名。
  •   连续文件支持(文件访问的时间确定性)
  •   快速搜寻逻辑。
  •   簇的预分配。
  •   文件创建,删除和重命名。
  •   文件读取,写入和查看。
  •   文件属性管理。
  •   通过TraceX进行系统级跟踪
  •   直观的文件访问API,包括:

fx_file_create

fx_file_delete

fx_file_attributes_set

fx_file_attributes_read

fx_file_read

fx_file_seek

fx_file_write

2.3.3  API命名规则

FileX的函数命名规则是:Noun-verb naming convention (名词动词命名约定)。根据这个命名规格,我们实际看下个API,比如:fx_file_allocate ,前缀tx,名词file_,动词allocate。再看下面API截图(部分函数截图):

 

基本也都符合这个命名规则。

2.3.4  安全认证

FileX通过了各行各业的高等级安全认证。

 

2.3.5  简单易用

FileX简单易用,API既直观又功能强大,并且所有API都遵循名词-动词命名约定。此外,整个API都具有功能一致性。例如,所有挂起的API都有一个可选的超时时间配置,对于API而言,超时的功能相同。

构建FileX应用程序也比较简单。教程的后面章节中,大家会体会到。FileX也有官方为其配套的用户手册。

2.3.6  快速推向市场

FileX易于安装,学习,使用,调试,验证,认证和维护。因此,根据嵌入式市场预测专家(EMF)的调查, ThreadX在过去七年中一直是领先的上市时间RTOS。调查一致显示,使用ThreadX的设计中有70%可以按时投放市场-超过了所有其他RTOS。

可以快速推向市场的原因:

  •   高质量文档。
  •   完整的源代码。
  •   易于使用的API。
  •   高级特性。
  •   广泛的第三方工具集成–特别是IAR。

2.3.7  高质量源代码

从一开始,ThreadX就被设计为工业级RTOS,并附带完整的C源代码。ThreadX源代码在质量和易于理解方面树立了标杆。此外,一个函数一个源文件的方式,大大方便用户查阅浏览。

ThreadX遵守严格的编码规范,包括要求每行C代码都必须有有意义的注释。此外,ThreadX源码已通过最高标准的认证。

2.3.8  支持的硬件平台

ThreadX在开箱即用,可以在各种主流的32/64位处理器上运行。经过全面测试和完全支持的平台如下:

 

2.4   ThreadX FileX高级特性

FileX的高级特性介绍如下:

2.4.1  多媒介管理(外挂多个设备)

FileX可以外挂不限数量的设备。每个媒介在fx_media_open调用中都有其自己独立的存储区和关联的驱动程序。FileX的默认发行版还附带了一个简单的RAM介质驱动程序和一个使用此RAM磁盘的演示系统。

2.4.2  逻辑扇区缓存

通过减少整个扇区的复制粘贴,FileX逻辑扇区高速缓存显着提高了性能。FileX为每个打开的媒介维护一个逻辑扇区缓存。逻辑扇区高速缓存的深度取决于通过fx_media_open API调用提供给FileX的内存量。

2.4.3  连续文件支持(文件访问时间确定性)

FileX通过函数fx_file_allocate提供连续文件支持,使文件访问具有时间确定的。该函数获取请求的内存量,并寻找一系列相邻的簇以满足请求。如果找到了这样的簇,则通过使其成为文件已分配簇链的一部分来对其进行预分配。在移动的物理媒介上,FileX连续文件支持可显着提高性能,并确定访问时间。

2.4.4  动态创建

FileX允许动态创建系统资源。如果应用程序具有多个或动态配置要求,则这一点尤其重要。此外,用户可以使用的FileX资源(媒体或文件)的数量没有限制。同样,系统对象的数量对性能没有任何影响。

2.4.5  exFAT支持

exFAT是Microsoft设计的文件系统,允许文件大小超过FAT32文件系统的4GB,容量超过32GB。

使用exFAT的用户必须使能宏定义FX_ENABLE_EXFAT重新编译FileX库。打开媒介时,FileX会检测到媒体类型。如果媒介使用exFAT格式化,则FileX会按照exFAT标准读写文件系统。要使用exFAT格式化新媒介,使用函数fx_media_exFAT_format。默认情况下,不启用exFAT。

2.4.6  容错支持(掉电保护)

FileX容错旨在防止由于文件或目录更新期间的中断而导致文件系统损坏。例如,将数据附加到文件时,FileX需要更新文件,目录条目以及可能的FAT条目的内容。如果此更新过程被中断(例如电源故障或介质在更新过程中弹出),则文件系统处于不一致状态,这可能会影响整个文件系统的完整性,从而导致文件损坏。

FileX容错功能通过记录在更新过程中更新文件或目录所需的所有步骤来工作。该日志条目存储在FileX可以找到和访问的专用扇区上。即使没有适当的文件系统,也可以访问日志数据的位置。因此,万一文件系统损坏,FileX仍然能够找到日志条目并将文件系统恢复到良好状态。

当FileX更新文件或目录时,将创建日志条目。成功完成更新操作后,将删除日志条目。如果在成功更新文件后未正确删除日志条目,则恢复过程确定日志条目中的内容与文件系统匹配,则无需执行任何操作,即可清除日志条目。

如果文件系统更新操作被中断,则下次FileX装入媒介时,容错功能将分析日志条目。日志条目中的信息允许FileX撤消已经应用到文件系统的部分更改(以防在文件更新操作的早期阶段发生故障),或者如果日志条目包含重做信息,则FileX能够完成先前操作所需的更改。

此容错功能可用于FileX支持的所有FAT文件系统,包括FAT12,FAT16,FAT32和exFAT。默认情况下,FileX中未启用容错功能。要启用容错功能,必须使用宏定义FX_ENABLE_FAULT_TOLERANT和FX_FAULT_TOLERANT来构建 FileX。在运行时,应用程序通过调用fx_fault_tolerant_enable来启动容错服务。服务启动后,所有文件和目录写操作都将通过容错模块进行。

当容错服务启动时,它首先检测该媒介是否在容错模块下受到保护。如果不是,则FileX会假定文件系统是完整的,并通过从文件系统分配用于日志记录和缓存的空闲块来开始保护。如果在文件系统上找到了容错模块日志,它将分析日志条目。FileX将还原先前的操作或重做先前的操作,具体取决于日志条目的内容。在处理所有先前的日志条目之后,文件系统变得可用。这样可以确保FIleX从已知的良好状态开始。

在FileX容错模块下保护了媒介之后,将不会使用其他文件系统来更新该介质。这样做会使文件系统上的日志条目与FAT表中的内容(目录条目)不一致。如果在使用容错功能将其移回到FileX之前,该媒介是由另一个文件系统更新的,则结果是不确定的。

2.5   ThreadX各行各业应用案例

ThreadX官网给出了航空航天,工业,汽车,医疗,消费电子,物联网,片上系统等方向的具体案例 : https://rtos.com/x-ware-showcase/

 

以消费电子方向为例,三星,NEST,HTC等都是其客户,对应的产品也非常多。并且这些产品的直接使用ThreadX全套,基本ThreadX有的,就不再使用第三方组件:

 

2.6   ThreadX论坛

针对ThreadX,专门建立了论坛版块:

http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12

当然,大家也可以上GUIX的官方Github开源地址提交问题:

https://github.com/azure-rtos

2.7   总结

关于ThreadX FileX就跟大家介绍这么多,更详细的可以上我们的论坛进一步讨论。

posted @ 2021-03-12 16:27  硬汉嵌入式  阅读(444)  评论(0编辑  收藏  举报