Wie der Titel besagt, arbeite ich an einer einfachen eingebetteten Anwendung, die einige Informationen von der seriellen Schnittstelle liest und sie in einer Datei protokolliert. Außerdem wird auf dem Display ein bisschen Status angezeigt.
Ich bin jetzt in der Phase, in der die Protokollierung zu laufen scheint, und ich versuche, das System zu konfigurieren, und ich habe ein paar Fragen.
Das System dient zum Protokollieren von Daten auf einem FAT32-USB-Stick, der jederzeit ausgesteckt, neu eingesteckt oder ausgetauscht werden kann. Was ist die bevorzugte Methode, um einen eingesteckten USB-Massenspeicher automatisch in ein festes Verzeichnis zu laden? Das usbmount-Paket scheint dies fast zu tun, aber die mangelnde Wartung macht etwas vorsichtig.
Ich kann die Stromversorgung nicht garantieren und kann keine sauberen Abschaltungen durchführen. Glücklicherweise sollten die einzigen Dateien, die außer den internen Betriebssysteminformationen geschrieben werden, die Protokolle sein. Rettet mich ein Journalling-Dateisystem für das Betriebssystem vor mir selbst oder sollte ich das System schreibgeschützt einbinden oder an RAM-Datenträgern basteln?
Überlebt und erholt sich das FAT-Dateisystem auf dem USB-Stick nach Stromausfällen und plötzlichen Auswürfen? Soll ich jedes Mal eine neue Protokolldatei erstellen, wenn sie bereitgestellt wird?
Ich habe den X-Server so eingerichtet, dass er automatisch startet, und habe mit den LXDE-Autostart-Skripten herumgespielt, um die Statusanzeige zu starten und den Fenstermanager / Bildschirmschoner zu deaktivieren. Gibt es noch andere Gründe für die Aufrechterhaltung einer kontinuierlichen Anzeige?
Der Logger hat keinen Ethernet-Zugang und benötigt eine genaue Uhr. Ist das RasClock-Modul eine geeignete Option?
Entschuldigung für den langen Beitrag und die vielen halbbezogenen Fragen.
Ich bin es gewohnt, mit einfachen eingebetteten Geräten umzugehen, für die ich die volle Kontrolle über die Software habe, und die Aufgabe, ein echtes Betriebssystem richtig zu konfigurieren, macht mir etwas Sorgen. Andererseits vermute ich eher, dass ich nicht der einzige bin, der den Pi für diese Art von Anwendung (ab-) verwendet, so dass die Fragen hoffentlich nicht zu spezifisch für meine spezielle Situation sind.
quelle
Antworten:
Der unplugged Teil davon ist problematisch. AFAIK, kein Computersystem irgendwo verspricht Ihnen das Recht, einen USB-Stick jederzeit und ohne potenzielle Probleme unangekündigt herauszuziehen. Sie müssen sich also überlegen, wie Sie das umgehen können.
Wiederum ist das plötzliche Ausschalten (fast) aller Computersysteme riskant. Es endet normalerweise in Ordnung (wer hat das nicht ein paar Mal getan, aus Versehen, wegen eines Stromausfalls usw.?), Aber es scheint ungewöhnlich viele Leute zu geben, die SD-Karten-Korruption mit dem Pi melden. Also, wenn Sie meinen, "Meistens wird das System nicht sauber heruntergefahren", müssen Sie umdenken, denn das wird eine Sackgasse sein. Beachten Sie, dass das Herunterfahren auch ohne Tastatur oder Netzwerkverbindung möglich ist. Sie können auch eine ähnliche Methode verwenden, um eine saubere Demontage des USB-Sticks auszulösen.
Sie können die
sync
Option hinzufügen, um das/etc/fstab
Zwischenspeichern einzuschränken. Beachten Sie jedochman mount
Folgendes:Dies gilt auch für SD-Karten. Solange Sie jedoch daran denken, Ihre Medien gelegentlich zu testen (und gegebenenfalls zu ersetzen), kann sich dies lohnen. Dies wird sich meiner Meinung nach leicht auf die allgemeine Leistung auswirken.
Versuchen Sie also zu vermeiden, dass Sie den Stecker oder den USB-Stick plötzlich ziehen, so gut Sie können, und entwerfen Sie auf keinen Fall ein Setup, das davon abhängt. Sagen Sie sich selbst oder anderen Benutzern beispielsweise nicht, dass es in Ordnung ist, den USB-Stick jederzeit zu entfernen, da dies nicht der Fall ist und Sie dies nicht tun können.
Das Tätigen geeigneter
sync
Aufrufe in Ihrer Anwendung (z. B. im Leerlauf oder nach einem wichtigen Schreibvorgang) ist eine gute Idee.Sobald Sie haben alles , was Sie installiert und konfiguriert werden soll , können Sie möglicherweise das Root - Dateisystem mounten schreibgeschützt, wenn Sie erstellen Sie separate Partitionen für
/var
,/run
, und/tmp
und jene rw montieren; Sie können auch eine solche gemountete Partition erstellen und die rw-Verzeichnisse damit verknüpfen.Auf einem Raspbian-Pi müssen Sie sich keine Sorgen machen
/run
, da es sich bereits um tmpfs (RAM) handelt./sys
und/proc
befinden sich ebenfalls im RAM (aber verwenden Sie sie nur für den vorgesehenen Zweck). Wenn das System für einen einzigen Zweck vorgesehen ist und alle Ihre Daten auf den USB-Stick übertragen werden,/var
ist dies das einzige Problem, aber meiner Meinung nach nicht kritisch.quelle
Früher habe ich an Gerätetreibern gearbeitet, die Speicherkarten lesen / beschreiben. Sie könnten in der Mitte einer Operation herausgerissen werden, so dass selbst durch Batterie oder Kondensator gesicherte Energie nicht helfen würde. Basierend auf den Formatierungsspezifikationen der Chips habe ich das Verhalten abgeleitet, das erforderlich ist, um minimalen Schaden durch "heißes" Entfernen und Einsetzen zu verursachen.
Grundsätzlich müssen Sie sicherstellen, dass Sie die Tatsache erkennen, wenn Sie während des Schreibvorgangs eines Datenblocks abgeschnitten sind (oder die Kontakte unruhig sind). Grundsätzlich muss den Daten eine Blocknummer (und eine Länge, wenn nicht eine feste Größe) vorangestellt und am Ende eine crc und (dieselbe) Blocknummer angehängt werden.
Der erste Schreibvorgang erfolgt am Ende mit einem Wert, der NICHT die nächste Blocknummer ist. Auf diese Weise tritt eine Blocknummer-Nichtübereinstimmung auf, wenn der Schreibvorgang nicht abgeschlossen wird, und dieser Datenblock ist als Müll bekannt. Dann schreiben Sie Ihren Datenblock mit der realen Blocknummer, gefolgt von der Länge, gefolgt von Ihrer von Ihrem bevorzugten Algorithmus generierten CRC und der realen Blocknummer. (Der CRC dient zum Schutz vor blitzschnellen Kontakten, die Ihre Daten beschädigen.)
Wenn die Stromversorgung wiederhergestellt oder die Speicherkarte wieder eingesetzt wird, akzeptieren Sie sequentielle Blöcke nur bis zu dem Punkt, an dem die Anfangs- und Endsequenznummern des Blocks nicht übereinstimmen oder die CRC falsch ist. Entfernen Sie diesen Block und setzen Sie die Protokollierung fort.
Dies ist jedoch ein Teil auf niedrigem Niveau. Dies über ein Dateisystem zu tun, ist eine andere Geschichte.
Was Sie wirklich brauchen, sind redundante Kopien Ihrer FAT, und machen Sie eine ähnliche Sache um die FAT-Tabelle. Anhand der fortlaufenden Nummer können Sie erkennen, welche Version aktuell ist. Die Übereinstimmung von Vorderseite und Rückseite sowie die CRC gewährleisten die Integrität.
Es ist nach dem Zubettgehen und ich hoffe, das ist klar genug.
quelle
Bezüglich der genauen Uhr gibt es viele günstige GPS-Module. Es ist schwer eine genauere Uhr zu finden.
quelle