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檢查文件系統是否已安裝