Frage

In einer Linux-Embedded-Anwendung Ich entwickle, besteht die Notwendigkeit, einige Ereignisse aufzuzuzeichnen, die von Zeit zu Zeit passieren. Diese Aufzeichnungen sind auf einem MTD-Flash-Gerät gespeichert und einmal geschrieben gibt es keine Notwendigkeit, sie zu ändern oder eine effiziente Suche, aber Lesezugriff erforderlich ist, um die Daten zu zeigen, zurück an den Benutzer. Ein großes Problem ist, dass die Macht jederzeit geht weg, ohne eine ordnungsgemäße Abschaltsequenz. Die Häufigkeit dieser Ereignisse auftreten kann, sehr langsam (Tage / Wochen), aber einige von ihnen werden auf einmal auftreten. Die Daten für jedes Ereignis gespeichert werden soll, wird stark typisierte. Datum, Zeit, ein paar kurze Textstrings und mehrere ganze Zahlen

Zur Zeit erbte ich eine Lösung auf Basis von jffs2 und SQLite, die bei weitem nicht optimal ist, weil die DB-Datei manchmal beschädigt werden. Wenn dies die gesamte Datei geschieht bekommt lesbar und es gibt keine Möglichkeit, zu verstehen, wenn es durch einen Fehler in jffs2 oder in SQLite oder wenn der Flash-Sektor war schlecht, oder wenn die Leistung wurde geschnitten, zur falschen Zeit verursacht wurde.

Gibt es eine Bibliothek oder eine Kombination aus Dateisystem / Bibliothek, die besser helfen können mir diese Art von Problem zu lösen? Oder soll ich nur eine Textdatei mit einem CSV-ähnlichen Format verwenden?

War es hilfreich?

Lösung

Wir plain old syslogd auf eine YAFFS2 Partition auf NAND-Flash verwenden, scheint es gut zu funktionieren: wenn Nachrichten an den Logger gesendet werden und Strom abgeschaltet wird unmittelbar nach (<100 ms) die Nachricht ist da und das Protokoll erscheint nie korrupt.

Dies ist auf der Beobachtung basiert, anstatt meine explizit zu wissen, dass alles immer konsistent sein wird, durch Design, Geist.

Andere Tipps

Ich bin kein Experte auf embeded Systemen, aber ich würde denken, dass eine CSV wahrscheinlich am besten sein würde. Es kann im Grunde nicht beschädigt werden, oder wenn es der Fall ist, dann kann man leicht den Fehler sehen und beheben manuell (neue Zeile oder nur eine Zeile zu entfernen). Ich habe gearbeitet, die Daten von einem eingebetteten System empfängt, wo sie eine Menge Korruption Probleme (teilweise auf dem System und teilweise während der Telefonleitung Übertragung) haben. Es wäre sehr hilfreich, wenn es in einem CSV-Format vom Typ ist und so können wir die Fehler finden und entfernen oder sie beheben, anstatt die gesamten Datensatz von korrumpieren.

Wenn Sie nicht innerhalb des Systems zu suchen sind, benötigen, dann eine CSV funktioniert perfekt.

Es gibt eine Reihe von Embedded-Dateisystemen (nicht fett kompatibel), die genau für diesen Zweck entwickelt. Ich kann nicht den Eindruck erwecken, da nie ein verwendet, aber hier etwas von Google. Ich bin sicher, dass Sie mehr graben kann, und hoffentlich hier jemand kann weitere Informationen zur Verfügung stellen, kann es basierend etwas GPL. Vergleich verschiedenen Dateisysteme sind hier

Zwei csv / Textdateien. Starten Sie ein neues Paar jedes Mal das System neu gestartet. Schreiben Sie jede Veranstaltung auf die erste Datei, spülen Sie die Datei zu speichern, schreiben Sie den Datensatz in die zweite Datei, dann wieder spülen.

Auf diese Weise, wenn Sie während der ersten Schreib alle Daten in der zweiten Kopie (bis zu diesem Schreiben) abstürzen wird noch da sein.

Stellen Sie sicher, die bündig ist ein vollständiges Dateisystem bündig und nicht nur die clib Puffer bündig.

Vielleicht legen Sie auch die Dateien auf separaten Dateisysteme. Reservieren von Raum vor, was Sie brauchen auch den Prozess beschleunigen helfen könnte.

Welche Einrichtungen zur Verfügung stehen? Die beste Möglichkeit ist oft zu log zu einer externen Quelle, zum Beispiel über Syslog, SNMP, Raw-Socket oder serielle Schnittstelle. Dies schützt Sie Protokolle von Unannehmlichkeiten auf dem Gerät selbst.

Wenn Sie Protokolle müssen intern speichern, ich habe festgestellt, Klartext, für Menschen lesbare Dateien die beste Option in Embedded-Geräten sein. Der „Schreib- / flush“ Zyklus ist schnell, sind keine Werkzeuge benötigt, um sie zu halten, und Sie können sie in Echtzeit zu überwachen. Wenn die Dateigröße ein Problem ist, können Sie mit einer ganzen Zahl zu statt formatierten Text, und Sie können ein numerisches „Ereignis-ID“ verwenden, um jedes Protokoll abkürzen (lassen Sie nur die instanzspezifischen Daten als Text).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top