高可靠文件系统在传动控制领域的实现与优化
2022-01-25王成杰付建国
周 斌,李 益,王成杰,付建国
应用研究
高可靠文件系统在传动控制领域的实现与优化
周 斌,李 益,王成杰,付建国
(中车株洲电力机车研究所有限公司,湖南株洲 412000)
工业传动控制领域具有大容量数据存储的需求,为了防止数据存储过程中突发断电引起的文件系统损坏,本文提出在VxWorks操作系统上挂载高可靠文件系统。该事务型文件系统具备掉电安全特性,可确保数据可靠稳定存储。针对NAND闪存,本文提出一种驱动层映射方案,实现存储容量的扩展;另外,将硬件ECC校验嵌入高可靠文件系统中,有效提升了系统的校验能力和访问速度。
高可靠文件系统 VxWorks 掉电安全 硬件ECC校验
0 引言
伴随着工业智能化的发展,工业传动控制领域需要大量的数据采集与分析,要求具备稳定的大容量数据存储和高效的I/O读写能力。但由于现场掉电不可控,可能发生异常掉电导致系统崩溃的问题,为了保证数据可靠存储,一款掉电安全的文件系统尤为必要。
目前嵌入式领域广泛应用的文件系统主要有FAT[1]、JFFS[2]、YAFFS[3~4]、TureFFS[5]。其中FAT虽然兼容性好,但空间开销大,磁盘利用率低。JFFS是一款针对闪存设计的日志型文件系统,TrueFFS实现了对闪存的磁盘模拟功能,但两者对NAND闪存支持效果都不佳。而YAFFS虽然是一款根据NAND闪存特性而设计的高效文件系统,但以上文件系统需要较大的额外开销来存放文件元信息,依旧存在异常崩溃的风险[6]。
高可靠文件系统是Datalight公司开发的一款事务型文件系统,数据更新时不影响原始数据,更新完成后才进行事务点切换。由于切换属于原子级操作,保证了数据时刻有效,真正实现了掉电安全,并且挂载和访问速度快,非常适用于系统稳定性要求高的工业传动控制领域,同时支持NOR、NAND、EMMC等各类存储器。
本文实现了在VxWorks硬实时操作系统上挂载高可靠文件系统,并且在一套系统中基于NOR、NAND闪存分别挂载了两个独立盘符。同时考虑NAND闪存的比特翻转等物理特性[7~9],将硬件ECC校验嵌入高可靠文件系统中,极大提升系统校验能力。此外提出了一种驱动层映射方案,整合多片NAND闪存容量进行统一管理,提升存储容量。
1 系统架构
工业传动控制领域某型控制平台,CPU采用飞思卡尔的MPC5125RM处理器,配置两片M29W256GL70N6F型NOR闪存,每片容量32 MB,两片MT29F8G08ABABAWP型NAND闪存,每片容量1 GB。
图1 控制平台系统框架
为了保证实时性和可靠性,采用风河硬实时VxWorks操作系统。其中NOR闪存1不挂载文件系统,用于存放BOOTROM引导程序、VxWorks镜像程序以及环境变量,NOR闪存2挂载高可靠文件系统,用于存放用户的应用程序和配置文件。两片NAND闪存集成挂载高可靠文件系统,用于记录运行过程中的状态和故障信息,通过驱动层映射,两片NAND通过挂载在同一盘符下,扩展闪存容量。
系统上电后,处理器中固化的RBL文件被加载至片内RAM运行,然后运行NOR闪存1的BOOTROM程序进行必要硬件初始化,进而启动加载VxWorks镜像程序。VxWorks进行底层BSP和内核初始化后,根据内核组件配置分别针对NOR闪存2和NAND闪存挂载高可靠文件系统。然后开始解析和执行存放在NOR文件系统中的应用程序,并将运行中的状态数据和故障信息存放在NAND文件系统中。
2 高可靠文件系统实现
2.1 高可靠文件系统介绍
本系统采用Datalight公司的高可靠文件系统,主要包括FlashFX和Reliance两部分。
FlashFX为FLASH驱动管理层,负责与底层FLASH通信,并为上层文件系统提供支撑。它负责提供块设备驱动,其可变的块格式提供了高效的闪存访问,支持磨损均衡和垃圾回收机制,并针对NAND闪存提供高效的版块管理机制。
Reliance为一款事务型文件系统,专为嵌入式领域设计,主要实现文件逻辑管理,具备掉电安全特性。如下图所示,它在执行数据更新时,所有文件系统修改都存储在未生效的工作态空间中,不会覆盖原始数据。只有在完成数据更新,设置新事务点后,才进行工作态到确定态的切换。该切换过程属原子级操作,确保了有异常发生时,或者采信事务点之前的原始数据,或者采信新数据,保证即使异常掉电时元数据和文件数据的完整性。同时由于消除了冗长的文件系统检查,还具备挂载速度快、高性能I/O读写等优点。
图2 文件系统掉电安全机制
2.2 高可靠文件系统移植
2.2.1 FlashFX组件生成
安装FlashFX的SDK包,SDK提供的工程样例中没有MPC5125处理器对应工程,可使用newproj.bat新建,或基于现有工程修改prjinfo.dat文件。主要配置或修改的参数有FlashFX安装路径、工程路径、CPU类型、编译器工具集。
挂载NOR闪存2。FlashFX针对该闪存实现了底层驱动接口,只需要修改ffxconf.h文件,增加如图3宏定义:
图3 基于NOR闪存的FlashFX配置
其中FFX_DEV0_SETTINGS宏定义中,0xFC000000L表示NOR的基地址,0x00008000L为NOR容量(单位KByte)。
挂载NAND闪存1,ffxconf.h文件中增加如图4宏定义:
图4 基于NAND闪存的FlashFX配置
FlashFX没有提供该型号的底层驱动,需要自实现NAND初始化、ID获取、读、写、擦驱动函数,然后修改fhpageio.c文件,该文件负责与底层驱动交互,将其中所有涉及驱动调用的修改为调用自实现驱动即可。
如果FlashFX支持该闪存型号,系统将根据获取的ID号自动设置闪存参数。如果不支持该型号闪存,需要修改nandid.c文件,按实际器件型号配置FLASH的ID号,在宏定义中修改闪存的容量、页、块以及OOB尺寸等信息。
修改dclconf.h文件,不使能VxWorks的高精度定时器,否则延迟时可能出错。
工程修改完成后,使用workbench3.2的shell窗口,切换至FlashFX工程路径,输入指令prjclean.bat清除编译信息,然后输入prjbuild.bat [n]编译,其中n取值0~2,数值越大编译涵盖的调试信息越多。编译成功后,将生成“flashfxPPC603diab.a”库文件。
2.2.2 Reliance组件生成
安装Reliance的SDK包,然后使用newproj.bat新建工程,或者基于现有工程修改prjinfo.dat文件。主要配置或修改Reliance安装路径、工程路径、、CPU族、CPU类型、编译器工具集等参数。
修改dclconf.h文件,不使用VxWorks的高精度定时器。Reliance工程一般不需要修改额外的源码即可编译,使用指令prjclean.bat和prjbuild.bat,编译成功后将生成“relFsLibPPC603diab.a”库文件。
2.3 集成至VxWorks内核
风河VxWorks内核支持高可靠文件系统,其中内核组件50ffx62.cdf和50relFs62.cdf分别为FlashFX和Reliance组件,这里需要将其替换成文件系统SDK中最新文件。
FlashFX和Reliance库文件都编译成功后,将其拷贝至VxWorks安装路径WindRiver6.8vxworks-6.8 argetlib下,并在VxWorks工程的属性LIBS一栏添加库路径。
然后打开VxWorks工程的内核配置,使能FlashFX组件的配置如下:根据ffxconf.h文件的设置,将NOR文件系统设置为盘符0,命名为“/tffs0”,将NAND文件系统设置为盘符1,命名为“/yaffs”。
图5 VxWorks内核中关于FlashFX的配置
使能Reliance组件的配置如下:
图6 VxWorks内核中关于Reliance的配置
另外修改VxWorks内核的xbdBlkDev.c和erfLib.c文件,调整扩大任务的堆栈大小。
最终编译VxWorks工程即可生成可用的底层镜像文件,即前文介绍的VxWorks镜像程序。
3 针对NAND闪存的文件系统优化
3.1 嵌入硬件ECC校验
对于NAND闪存,高可靠文件系统仅支持软件ECC校验,其具体思路是:写操作时,对数据进行软件ECC校验,并将ECC校验值存到闪存的OOB区,下次读数据时,同样对数据做ECC校验,并将校验值与OOB区存放的值比对是否一致。其校验能力为1比特/256字节。而本系统架构可支持硬件ECC校验,硬件ECC不需要软件计算,直接硬件生成并存放在OOB区,其速度更快,且校验能力更强,最高可达32比特/2048字节。
本文提出将硬件ECC校验嵌入高可靠文件系统中。首先修改底层驱动,修改NAND初始化函数,使能硬件ECC校验算法,配置校验能力为24比特/2048字节。修改NAND读驱动,将硬件ECC校验结果作为函数返回值,具体返回值状态表1所示:
表1 NAND闪存读驱动返回值对照表
同步修改FlashFX。fhpageio.c文件中FfxHookNTPageRead()读接口在调用读驱动时,保存返回值中的ECC校验结果。然后修改dlecc.c中的DclEccCorrect()函数,屏蔽掉其中的软件ECC校验值计算过程,直接使用读驱动中返回的硬件ECC校验结果。
3.2 构建驱动映射层
本系统采用两片同型号的NAND闪存,分别连接MPC5125处理器的CS0和CS3片选。通过构建驱动映射层,可以将两片闪存挂载在同一盘符下,使两片独立闪存可视作整体进行统一管理,扩展了存储容量。
首先需要修改文件系统FlashFX中的nandid.c文件,将两片视作一个整体,调整闪存的总容量为原有两倍,闪存的块个数也为原有两倍,页尺寸信息不变,重新编译FLashFX库文件。
然后构建驱动映射层,负责衔接上层文件系统和底层驱动。它会解析文件系统需要访问的地址空间,当需要读写前2048*128个页,或者需擦除前2048个块时,映射调用对应CS0的NAND底层驱动,反之则映射调用对应CS3的NAND底层驱动。
4 文件系统验证与分析
高可靠文件系统在VxWorks实时操作系统上的实现移植和优化后,这里对其方案可行性进行验证,并与yaffs2文件系统进行对比,比对两种文件系统的挂载和访问速度。
4.1 文件系统挂载验证
超级终端中输入relFsVolFormat “/tffs0”格式化NOR闪存的文件系统,返回值0表示格式化成功。接着输入relFsShow “/tffs0”可查看NOR文件系统的基本信息,返回值为0即验证挂载成功,显示其容量约为NOR闪存容量。
同样,输入relFsVolFormat “/yaffs”格式化NAND闪存的文件系统,返回值0表示格式化成功,接着输入relFsShow “/yaffs”可查看NAND文件系统的基本信息。返回值为0即验证挂载成功,其容量约为两片NAND闪存容量总和。
具体的挂载成功信息参见图7所示。
FlashFX和Reliance都分别提供了全套的测试组件和工具组件,使能了这些组件后,可以对移植的文件系统进行细致而全方位的测试。
4.2 性能分析
基于本文的文件系统优化方案,针对本系统的NAND闪存,在VxWorks实时操作系统上,对比yaffs2和reliance高可靠文件系统的挂载和访问速度,性能对比如图8所示。高可靠文件系统,由于始终处于有效状态,初始化时不需要进行冗长的存储介质扫描,相较而言挂载速度更快。作为事务型文件系统,避免了费时的日志操作,并通过使用虚拟逻辑块和缓冲区,其I/O读写性能要更好。而且,基于原始数据保存,直到数据更新完成才进行事务切换,真正确保了掉电安全。
图8 高可靠文件系统性能分析
5 结语
本文针对工业传动控制领域因为异常掉电可能导致文件系统损坏的问题,实现了在VxWorks实时操作系统上基于两种不同类型的闪存挂载了高可靠文件系统。该事务型文件系统,因为始终保证事务点切换的原子级操作,具备掉电安全特性。基于NAND闪存,本文提出将硬件ECC嵌入高可靠文件系统,提升了系统校验能力和访问速度,并通过构建驱动映射层,扩大了存储容量。通过验证与分析,本系统方案下的文件系统挂载和访问速度均要优于yaffs文件系统。且本方案不局限于工业传动控制领域,有望在任何有掉电安全需求的嵌入式领域应用。
[1] 王丹, 姚磊, 杨云川, 杨向锋. 基于FAT文件系统的高速大数据记录仪的设计[J],电子设计工程, 2019, 27(20): 75-78.
[2] 胡海明, 周楠, 龚宬, 等. JFFS2文件系统在天熠操作系统中的实现[J],计算机工程与设计, 2017, 38(12): 3461-3467.
[3] 柴权珂, 严华. 基于无效页年龄的NAND闪存垃圾回收算法[J], 微电子学与计算机, 2021, 38(3): 8-13.
[4] 刘世杰. 基于YAFFS2文件系统元数据的数字取证研究[D], 武汉: 武汉轻工大学, 2020.
[5] 陈阳, 姜育生, 刘宝恒. 基于TureFFS的FLASH驱动程序分析与实现[J], 电子设计工程,2020, 28(14): 190-193.
[6] 李书根, 潘海燕, 王培. 一种嵌入式实时操作系统高可靠文件系统[J],微电子学与计算机, 2014, 31(3): 14-22.
[7] 刘洋, 李杰, 李金强, 等. 一种基于RCRF+BCH算法的NAND FLASH纠错方案的FPGA设计与实现[J],空军工程大学学报(自然科学版), 2020, 21(6): 46-52.
[8] Zhou B, Wan S G, Xie C S. Isolation: Inexpensively separating cold data via garbage collection to improve the lifetime and performance of NAND flash SSDs[J]. Concurrency and Computation: Practice and Experience, 2019(3).
[9] Seo S B, Kim W, Kwon SJ. Efficient page collection scheme for QLC NAND Flash memory using cache[J]. International Journal of Advanced Computer Science and Applications, 2018, 9(11): 458-461.
Implement and optimization of highly reliable file system
Zhou Bin, Li Yi, Wang Chengjie, Fu Jianguo
( CRRC Zhuzhou Electric Locomotive Research Institute Co., Ltd, Zhuzhou 412000, Hunan China)
TP316
A
1003-4862(2022)01-0044-05
2021-06-19
周斌(1992-),男,工程师。主要从事嵌入式驱动软件开发。Email:zhoubin0920@163.com