Spiffs(SPI闪存文件系统)
v0.3.7
版权(C)2013-2017 Peter Andersson(gmail.com上的Pelleplutt1976)
有关法律内容,请参阅许可证。基本上,您可以使用源头做任何您想做的事情。只要我不承担任何责任,请使用,修改,出售,打印,滚动并抽烟。
喜欢听到反馈!
介绍
Spiffs是用于嵌入式目标上SPI或闪存设备的文件系统。
Spiffs的设计考虑到以下特征:
- 小(嵌入式)目标,稀疏的RAM没有堆
- 只有很大的数据(块)才能消除
- 擦除将把所有位重置为街区
- 写作拉一个到零
- 零只能通过擦除将其拉到
- 穿磨损
建筑
mkdir build; make
否则,将builddir变量朝向makefile的顶部配置为与默认build相对的东西。通过make test对主机进行理智检查,并参考.travis.yml进行官方的深入测试程序。请参阅Wiki,以将Spiffs整合到项目中,而Nodemcu的Spiffsimg是该主题的一个很好的例子。
特征
Spiffs的作用:
- 专为低RAM使用而设计
- 使用静态大小的RAM缓冲区,独立于文件数量
- 类似POSIX的API:开放,关闭,读,写,寻求,统计等
- 它可以在任何或闪光灯上运行,不仅可以在SPI Flash上 - 理论上也可以在微处理器的嵌入式闪光灯上
- 多个SPIFFS配置可以在同一目标上运行 - 甚至在同一SPI闪存设备上
- 实现静态磨损升级
- 内置文件系统一致性检查
- 高度可配置
什么不是:
- 目前,Spiffs不支持目录。它产生平坦的结构。使用路径tmp/myfile.txt创建文件将创建一个名为tmp/myfile.txt的文件,而不是目录TMP下的myfile.txt 。
- 这不是实时堆栈。一个写作操作可能比另一个持续时间更长。
- 可扩展性差。 Spiffs用于小型内存设备 - SPI闪光灯的正常尺寸。超越〜128mbyte可能是一个坏主意。这是设计目标的副作用,以便使用尽可能少的RAM。
- 目前,它不能检测或处理不良块。
- 一种配置,一个二进制。没有一个通用的二进制二进制处理可以处理所有类型的配置。
注意
0.4.0正在建设中。这是一个完整的重写,将改变基础结构。因此,它与早期版本的文件系统不兼容。 API是相同的,并进行了较小的修改。某些配置标志将被删除(因为它们在0.4.0中是强制性的),并且某些功能可能会掉落到0.4.1。如果您有任何担忧或问题,可以在第179期中对其进行讨论
更多信息
有关配置,集成,使用和优化Spiffs,请参见Wiki。
有关设计,请参见文档/Tech_spec。
对于通用的SPI闪存驱动程序,请参阅此信息。
历史
0.3.7
- 固定阻止寻求负面偏移#158
- 修复了文件描述符偏移未更新的同一文件上的多个fds#157
- 固定的缓存页面未关闭删除文件#156
- 修复了当完全索引的第一级LUT#148的终止时修复了LSEEK错误
- 固定磨损调整问题#145
- 修复了在Flash#130中的界限中写出界限的尝试
- 在寻求第121端时设置文件偏移量(谢谢@sensslen)
- 修复了在Virgin Files#120中寻求的(谢谢@sensslen)
- 可选文件元数据#128(感谢@CESANTA)
- AFL测试框架#100#143(谢谢@pjsg)
- TestFrame更新
新的API功能:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta更新文件的元数据
新配置定义:
-
SPIFFS_OBJ_META_LEN启用可能将额外的元数据添加到文件
0.3.6
- 修复索引内存映射#98中的范围错误
- 添加索引内存映射#97
- 优化大型文件#96的Spiffs_read
- 添加时间缓存以打开文件#95
- 更强大的GC#93(谢谢@dismirlian)
- 修复了在某些缓存情况下相同数据的双重写入
- 修复了read_ly builds中的一个打开错误
- 文件在Spiffs_readdir#90中不可见(谢谢 @benpicco-tmp)
- 缓存负载代码清理#92(谢谢@niclash)
- 固定锁/解锁不对称#88#87(感谢@jackjefferson,@dpruessner)
- TestFrame更新
新的API功能:
-
SPIFFS_ix_map映射索引元数据到文件的内存 SPIFFS_ix_unmap umaps索引元数据数据SPIFFS_ix_remap更改索引元数据映射的文件偏移量SPIFFS_bytes_to_ix_map_entries实用程序,获取给定量的字节的所需向量长度SPIFFS_ix_map_entries_to_bytes效用,获取字节数可以表示给定长度
新配置定义:
-
SPIFFS_IX_MAP启用可能性将索引元数据映射到内存以使阅读速度更快 SPIFFS_TEMPORAL_FD_CACHE启用时间缓存以更快地打开文件SPIFFS_TEMPORAL_CACHE_HIT_SCORE用于调整临时缓存
0.3.5
- 修复了FS检查中的错误
- API返回实际错误代码#84)(谢谢@Nails)
- 修复非GCC#83#81的编译器警告(谢谢@Nails)
- 无法从全FS#82恢复(感谢@Rojer)
- 定义spiffs_o_*标志#80
- 长文件名#79的问题(谢谢@psjg)
- 重复文件名称错误修复#74(谢谢@igrr)
- spiffs_eof和spiffs_tell返回错误的值#72(感谢@ArtemPisarenko)
- 一堆testframe更新#77#78#86(感谢@dpreussner,@psjg ao)
0.3.4
- 添加了用户回调文件func。
- 修复了具有OBJ ID的Stat错误。
- spiffs_probe_fs添加
- 增加可能编译仅阅读版本的spiffs的可能性
- 如果需要,使魔术依赖于FS长度(请参阅#59&#66)(谢谢@hreintke)
- 暴露的spiffs_open_by_page_function
- 零尺寸的文件无法寻求#57(谢谢 @lishen2)
- 添加告诉和EOF功能#54(谢谢@Raburton)
- 制作API字符串参数const#53(谢谢@Raburton)
- 在Mount()#51(感谢@Rojer)期间保存USER_DATA
新的API功能:
-
SPIFFS_set_file_callback_func注册一个回调,以告知有关文件事件 SPIFFS_probe_fs探测一个spi闪光灯,试图找出fs的大小SPIFFS_open_by_page打开页面索引文件SPIFFS_eof检查是否达到文件结尾SPIFFS_tell返回当前文件偏移
新配置定义:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
可能与0.3.2结构不兼容。请参阅第40期
- 将整数偏移添加到文件手柄的可能性
- 截断功能推测太少的免费页面#49
- 截断功能中的错误#48(谢谢@paweldefee)
- 更新spiffs_gc.c-删除不必要的参数(谢谢@paweldefee)
- 更新集成文档(感谢@paweldefee)
- 修复64位平台中的指针截断(感谢@IGRR)
- 零尺寸的文件无法读取#44(谢谢@rojer)
- (更多)正确计算obj_lu_find中的max_id#42#41(谢谢 @lishen2)
- 在OBJ_LU_FIND_FREE#41中检查正确的错误代码(谢谢 @lishen2)
- spiffs_lseek的摩尔评论(谢谢@igrr)
- 修复了Spiffs_page_object_ix#40中的填充(谢谢@jmattsson @lishen2)
- 修复了gc_quick测试(感谢@jmattsson)
- 添加spiffs_excl标志#36
- 如果启用缓存#37,Spiffs_close可能会默默失败
- 回调中的用户数据#34
- 忽略在Cache设置中的Singleton Build(感谢Luca)
- 编译错误已修复#32(谢谢@chotasanjiv)
- Align cand_scores(谢谢@hefloryd)
- 修复Spiffs_cache为0时修复构建警告(感谢@ajaybhargav)
新配置定义:
0.3.2
- 如果给出过多的缓存,请限制缓存尺寸(感谢PGEIEM)
- 新功能 - 受控擦除。 #23
- spiffs_rename泄漏文件文件描述符#28(感谢Benpicco)
- 移动的DBG打印在测试框架中定义为params_test.h
- lseek应该返回产生的偏移(谢谢肝素)
- 修复了DBG IFDEFS上的类型
- 关于签名/未签名比较的沉默警告当Spiffs_obj_id为32位时(谢谢Benpicco)
- test_spiffs.c#21中可能的错误(感谢yihcdaso-yeskela)
- 缓存可能经常撰写#16
- 甚至MOAR TestRunner更新
- 测试框架更新和一些添加的测试
- 下一代的一些想法
- 测试Sigsevs#13时太多(感谢孤独的wolfx2)
- GC可能是次优#11
- 修复永恒的readdir,当objheader在最后一个块,最后一个条目
新的API功能:
-
SPIFFS_gc_quick致电非信息GC -
SPIFFS_gc致电全面侵入性GC
0.3.1
0.3.0
- 创建文件时添加了现有的namecheck
- 许多静态分析错误#6
- 添加了重命名弹性
- 修复spiffs_read长度超过文件大小
- 添加了读数超出文件长度测试柜
- 使构建更加可配置
- 由于MINGW中的冲突,在Spiffs中更改了Spiffs的名称
- 改进的GC检查,修复了附加错误,对于非常特殊的情况,更牢固的截断
- GC检查抢占GC,截断甚至更少挑剔
- 某些目标需要的结构对齐,在Spiffs Config#10中定义
- Spiffs文件系统魔术,在配置中可定义
新配置定义:
-
SPIFFS_USE_MAGIC启用或禁用魔术检查 SPIFFS_ALIGNED_OBJECT_INDEX_TABLES对某些目标的对齐
新的API功能:
-
SPIFFS_rename重命名文件 SPIFFS_clearerr清除最后一个errno-
SPIFFS_info返回FS中用过的信息和总字节 SPIFFS_format格式化文件系统SPIFFS_mounted检查文件系统是否已安装