Spiffs (SPI -Flash -Dateisystem)
V0.3.7
Copyright (C) 2013-2017 Peter Andersson (Pelleplutt1976 bei gmail.com)
Für legale Sachen siehe Lizenz. Grundsätzlich können Sie mit der Quelle alles tun, was Sie wollen. Verwenden, ändern, verkaufen, ausdrucken, rollen und rauchen - solange ich nicht verantwortlich bin.
Ich liebe es, Feedback zu hören!
EINFÜHRUNG
SPIFFS ist ein Dateisystem für SPI- oder Flash -Geräte für eingebettete Ziele.
SPIFFS ist mit Blick auf die folgenden Eigenschaften konzipiert:
- Kleine (eingebettete) Ziele, spärlicher RAM ohne Haufen
- Es können nur große Datenbereiche (Blöcke) gelöscht werden
- Eine Löschung setzt alle Bits im Block auf die ein
- Das Schreiben zieht einen zu Nullen
- Nullen können nur durch Löschen zu denen gezogen werden
- Nivellierung tragen
GEBÄUDE
mkdir build; make
Andernfalls konfigurieren Sie die builddir -Variable nach makefile als etwas, das dem build entgegengesetzt ist. Gefühle überprüfen den Host per make test und siehe .travis.yml für den offiziellen eingehenden Testverfahren. Sehen Sie sich das Wiki an, um Spiffs in Projekte zu integrieren, und Spiffsimg von NodeMcu ist ein gutes Beispiel zu diesem Thema.
MERKMALE
Was Spiffs tut:
- Speziell für den Nutzungsverbrauch mit niedrigem RAM ausgelegt
- Verwendet unabhängig von der Anzahl der Dateien statisch große RAM -Puffer
- POSIX-ähnliche API: Öffnen, Schließen, Lesen, Schreiben, Suchen, Status usw.
- Es kann auf keinem oder Blitz ausgeführt werden, nicht nur SPI -Blitz - theoretisch auch auf eingebettetem Blitz eines Mikroprozessors
- Mehrere Spiffs -Konfigurationen können auf demselben Ziel ausgeführt werden - und sogar auf demselben SPI -Flash -Gerät
- Implementiert statische Verschleiß -Leveling
- Integrierte Konsistenzprüfungen in Dateisystemen
- Hochkonfigurierbar
Welche Spiffs nicht:
- Derzeit unterstützt SPIFFS Verzeichnisse nicht. Es erzeugt eine flache Struktur. Erstellen einer Datei mit Pfad TMP/myFile.txt erstellt eine Datei namens TMP/myFile.txt anstelle einer myfile.txt unter dem Verzeichnis TMP .
- Es ist kein Echtzeitstapel. Eine Schreiboperation könnte viel länger dauern als eine andere.
- Schlechte Skalierbarkeit. Spiffs ist für kleine Speichergeräte vorgesehen - die normalen Größen für SPI -Blitze. Es ist wahrscheinlich eine schlechte Idee, über ~ 128mbyte hinauszugehen. Dies ist ein Nebeneffekt des Designziels, um so wenig RAM wie möglich zu verwenden.
- Derzeit erkennt es schlechte Blöcke oder handelt es sich um keine schlechten Blöcke.
- Eine Konfiguration, eine binäre. Es gibt keine generischen Spiffs Binary, die alle Arten von Konfigurationen behandelt.
BEACHTEN
0.4.0 befindet sich im Bau. Dies ist eine vollständige Umschreibung und verändert die zugrunde liegende Struktur. Daher ist es nicht mit früheren Versionen des Dateisystems kompatibel. Die API ist gleich, mit geringfügigen Änderungen. Einige Konfigurationsflags werden entfernt (da sie in 0.4.0 obligatorisch sind) und einige Merkmale können bis 0,4.1 abfallen. Wenn Sie Sorgen oder Fragen haben, kann dies in Ausgabe Nr. 179 besprochen werden
Weitere Informationen
Sehen Sie sich das Wiki zum Konfigurieren, Integrieren, Verwenden und Optimieren von Spiffs an.
Für Design siehe Docs/Tech_Spec.
Für einen generischen SPI -Flash -Treiber sehen Sie dies.
GESCHICHTE
0.3.7
- behoben verhindern, dass Sie negative Offsets #158 suchen
- Die Fixierung der Dateideskriptor -Offsets, die für mehrere FDs in derselben Datei Nr. 157 nicht aktualisiert wurde
- Die Cache -Seite behoben für entfernte Dateien Nr. 156 nicht geschlossen
- Es wurde ein LSEEK -Fehler behoben, wenn Sie genau suchen, um eine vollständig indizierte LUT #148 in der ersten Ebene zu beenden
- Fixed Wear Leveling Problem #145
- fester Versuch, in Flash #130 aus den Grenzen zu schreiben,
- Stellen Sie den Dateiversatz fest, wenn Sie über End #121 suchen (danke @Senslen)
- Suchen in Virgin -Dateien #120 behoben (danke @sensslen)
- Optionale Dateimetadaten #128 (danke @cesanta)
- AFL -Test -Framework #100 #143 (Danke @PJSG)
- Testframe -Updates
Neue API -Funktionen:
-
SPIFFS_update_meta, SPIFFS_fupdate_meta - Aktualisieren Sie die Metadaten für eine Datei
Neue Konfiguration definiert:
-
SPIFFS_OBJ_META_LEN - Aktivieren Sie die Möglichkeit, Dateien zusätzliche Metadaten hinzuzufügen
0.3.6
- Beheben Sie den Reichweite Fehler in der Indexspeicherzuordnung #98
- Fügen Sie die Indexspeicherzuordnung #97 hinzu
- Optimieren Sie spiffs_read für große Dateien #96
- Fügen Sie zeitlicher Cache zum Öffnen von Dateien #95 hinzu
- Robuster GC #93 (danke @dismirlian)
- In bestimmten Cache -Situationen eine doppelte Schreiben der gleichen Daten behoben
- Ein offener Fehler in Read_only Builds behoben
- Datei nicht sichtbar in spiffs_readdir #90 (danke @benpicco-tmp)
- Cache -Ladecode -Reinigung #92 (danke @niclash)
- Fixed Lock/Entsperrasymmetrie #88 #87 (danke @jackjefferson, @dpruessner)
- Testframe -Updates
Neue API -Funktionen:
-
SPIFFS_ix_map - MAP -Index -Meta -Daten zum Speicher für eine Datei -
SPIFFS_ix_unmap - Unmaping Index -Meta -Daten für eine Datei -
SPIFFS_ix_remap - Ändert die Dateiversetzt für die Indexmetadatenkarte -
SPIFFS_bytes_to_ix_map_entries - Dienstprogramm, Erhalten Sie die benötigte Vektor für eine bestimmte Anzahl von Bytes -
SPIFFS_ix_map_entries_to_bytes - Dienstprogramm, Anzahl der Bytes, die ein Vektor die angegebene Länge darstellen kann
Neue Konfiguration definiert:
-
SPIFFS_IX_MAP - Aktivieren Sie die Möglichkeit, Index -Meta -Daten für schneller zu lesen -
SPIFFS_TEMPORAL_FD_CACHE - Aktivieren Sie den zeitlichen Cache für das Öffnen von Dateien schneller -
SPIFFS_TEMPORAL_CACHE_HIT_SCORE - Zum Stimmen des temporalen Cache
0.3.5
- Ein Fehler im FS -Scheck behoben
- API gibt die tatsächlichen Fehlercodes #84 zurück) (danke @nails)
- Fix-Compiler-Warnungen für Nicht-GCC #83 #81 (Danke @nails)
- Ich kann mich nicht von Full FS #82 erholen (danke @rojer)
- Definieren Sie SPIFFS_O_* Flags #80
- Problem mit langen Dateinamen #79 (danke @psjg)
- Doppelter Dateiname Fehler Fix #74 (Danke @igrr)
- SPIFFS_EOF und SPIFFS_TELL RETURACH WIRKLICHER Wert Nr. 72 (Danke @artempisarenko)
- Haufen von Testframe -Updates #77 #78 #86 (danke @dpreissner, @psjg ao)
0.3.4
- Benutzer -Callback -Dateifunktion hinzugefügt.
- Ein Statistikfehler mit OBJ -ID behoben.
- Spiffs_probe_fs hinzugefügt
- Fügen Sie die Möglichkeit hinzu, um eine schreibgeschützte Version von Spiffs zu kompilieren
- Machen Sie Magie abhängig von der FS -Länge, falls erforderlich (siehe #59 & #66) (Danke @Hinnke)
- Exponierte spiffs_open_by_page_function
- Datei mit Nullgröße kann nicht #57 sein (danke @lishen2)
- Fügen Sie Tell and EOF -Funktionen #54 hinzu (danke @raburton)
- Machen Sie API -String -Params const #53 (danke @raburton)
- Bewahren Sie user_data während des montage () #51 (danke @rojer)
Neue API -Funktionen:
-
SPIFFS_set_file_callback_func - Registrieren Sie einen Rückruf über Dateiereignisse -
SPIFFS_probe_fs - Sonde einen SPI -Blitz, der versucht, die Größe von FS herauszufinden -
SPIFFS_open_by_page - Öffnen Sie eine Datei nach Seitenindex -
SPIFFS_eof - Überprüft, ob das Ende der Datei erreicht ist -
SPIFFS_tell - Gibt den aktuellen Dateiversatz zurück
Neue Konfiguration definiert:
-
SPIFFS_READ_ONLY -
SPIFFS_USE_MAGIC_LENGTH
0.3.3
Es ist möglicherweise nicht mit 0,3.2 Strukturen kompatibel. Siehe Ausgabe Nr. 40
- Möglichkeit, Ganzzahl -Offset zu Dateihandles hinzuzufügen
- Abschneidungsfunktion setzt zu wenige kostenlose Seiten #49 voraus
- Fehler in der Truncate -Funktion #48 (danke @paweldefee)
- Aktualisieren Sie SPIFFS_GC.C - Unnötigen Parameter entfernen (danke @paweldefee)
- Aktualisieren Sie Integrationsdokumente (danke @paweldefee)
- Fix Zeigerkürzung in 64-Bit-Plattformen (danke @igrr)
- Dateien mit Nullgröße können nicht gelesen werden #44 (danke @rojer)
- (Mehr) Richtige Berechnung von max_id in obj_lu_find #42 #41 (danke @lishen2)
- Überprüfen Sie den richtigen Fehlercode in OBJ_LU_FIND_FREE #41 (danke @lishen2)
- Moar Kommentare für spiffs_lseek (danke @igrr)
- Behobene Polster in spiffs_page_object_ix #40 (danke @jmattsson @lishen2)
- Behoben GC_quick -Test (danke @jmattsson)
- Fügen Sie Spiffs_excl Flag #36 hinzu
- SPIFFS_CLOSE kann lautlos ausfallen, wenn der Cache aktiviert ist #37
- Benutzerdaten in Callbacks #34
- Ignorieren Sie Singleton Build im Cache -Setup (danke Luca)
- Kompilierungsfehler behoben #32 (danke @chotasanjiv)
- Ausrichten candcors_scores (danke @hefloryd)
- Fix -Build -Warnungen, wenn spiffs_cache 0 ist (danke @ajaybhargav)
Neue Konfiguration definiert:
0.3.2
- Begrenzen Sie die Cache -Größe, wenn zu viel Cache angegeben wird (danke Pgeiem)
- Neue Funktion - kontrollierte Löschung. #23
- Spiffs_rename lecks Dateideskriptoren #28 (danke Benpicco)
- Verschiebter DBG -Druck definiert im Test -Framework auf params_test.h
- LSEEK sollte den resultierenden Offset zurückgeben (danke Hefloryd)
- behoben den Typ auf DBG ifdefs
- Schweigenwarnung vor signiertem/vorzeichenlosen Vergleich, wenn spiffs_obj_id 32 Bit ist (danke Benpicco)
- Möglicher Fehler in test_spiffs.c #21 (danke yihcdaso-yeskela)
- Cache könnte zu oft #16 schreiben
- Sogar Moar Testrunner Updates
- Testframework -Update und einige hinzugefügte Tests
- Einige Gedanken für die nächste Gen
- Testen Sie Sigsevs, wenn Sie zu viele Sektoren #13 haben (danke allein
- GC könnte suboptimal #11 sein
- Fix Eternal Readdir, wenn Objheader im letzten Block, letzter Eintrag
Neue API -Funktionen:
-
SPIFFS_gc_quick - Rufen Sie einen nicht störenden GC an -
SPIFFS_gc - Rufen Sie einen vollständigen aufdringlichen GC an
0.3.1
- Zwei Rückkehrwarnungen entfernt, war bei der Veröffentlichung zu Triggerhappy
0.3.0
- Fügte vorhandenen Namecheck beim Erstellen von Dateien hinzu
- Viele statische Analyse -Fehler #6
- Umbenennungsfunktion hinzugefügt
- Fix Spiffs_read Länge, wenn Sie über die Dateigröße hinaus lesen
- Lesen Sie über die Dateilänge TestCase hinweg
- Bauen etwas konfigurierbarer gemacht
- Der Name in Spiffs von "errno" zu "err_code" aufgrund von Konflikten in Mingw zu "err_code" geändert
- Verbesserte GC -Überprüfungen, behoben einen Append -Fehler, robuster für ganz Sonderfall
- GC -Schecks sind GC vor, schneiden noch weniger wählerisch ab
- Strukturausrichtung für einige Ziele benötigt, definieren Sie in SPIFFS -Konfiguration #10
- Spiffs Dateisystem Magie, definierbar in der Konfiguration
Neue Konfiguration definiert:
-
SPIFFS_USE_MAGIC - Aktivieren oder deaktivieren Sie die magische Überprüfung am Mount -
SPIFFS_ALIGNED_OBJECT_INDEX_TABLES - Ausrichtung für bestimmte Ziele
Neue API -Funktionen:
-
SPIFFS_rename - Dateien umbenennen -
SPIFFS_clearerr - löscht das letzte Errno -
SPIFFS_info - Gibt Informationen zu gebrauchten und insgesamt Bytes in FS zurück -
SPIFFS_format - Formatiert das Dateisystem -
SPIFFS_mounted - Überprüft, ob das Dateisystem montiert ist