Frage

Embedded Linux-basierte Geräte erfordern oft einen Mechanismus zum aktualisieren von Anwendungen und system-Dateien.Für Beispiel, eine (nicht vernetzte) lab instrument mit einem USB-Anschluss können Sie software-updates von einem USB-stick.

Es wäre eine einfache Sache, Sie führen ein Skript zum kopieren von Dateien in das Gerät internen flash-Speicher.Es besteht jedoch die Gefahr, dass das Gerät verlieren würde, die macht in der Mitte der update-und am Ende ein Stein.

Die situation für die Anwendung Dateien ist ein bisschen einfacher, da gibt es Zimmer zu duplizieren Verzeichnis der Anwendung, aktualisieren eine Kopie und schnell auszutauschen, alte und neue Verzeichnisse, die Minimierung der Fehler-Fenster.

Die Dinge sind dicier für kernel-und system-Dateien, da sind Sie verteilt in der gesamten Datei system.

Wir haben uns verwendeten hard-und soft-links in der Datei system identifizieren Sie kritische Dateien.Wir verwenden hashes für Dateien und Archive, um zu überprüfen die Integrität der Datei.Wir betrachtet haben, mit einem Notfall-ramfs im kernel zu bieten eine Ersatz, wenn ausgehend von der aktualisierten Datei system ausfällt.

Was sind Ihre Ansätze, um dieser Anforderung?

War es hilfreich?

Lösung

Ich würde mit dem gleichen Ansatz, wie mit den Dateien der Anwendung:Für die kritischen Dateien und komplett eigenen partition, link zu Ihnen, und duplizieren Sie die partition.In alle Ihre init sollten Sie als erstes überprüfen, ob die links zeigen alle auf die gleiche partition, wenn nicht, setzen Sie Sie (auf der partition mit den Dateien, die mit dem neuesten Datum einer Datei).Wenn Sie wollen zu aktualisieren, kopieren Sie einfach alles auf die neue partition, und wenn alles in Ordnung ist (CRC ok) Schleife über die Dateien, und legen Sie für jede der link von einem Dateisystem zum anderen.

So sind Ihre wichtigen Dateien sollten stets in sauberen Zustand.

Szenarien:

  1. Update schlägt fehl, beim kopieren der Dateien auf die neue partition

    Kein Problem, denn die links zeigen noch auf die alten zu arbeiten.

  2. Update fehlschlägt, wenn die Verknüpfung

    Kein Problem, da alle neuen Dateien gültig sind und bereits kopiert (sonst die Neuverknüpfung Schritt wouldnt start), setup überprüfen, korrigieren Sie dies

Andere Tipps

Wenn Sie müssen, um die Zuverlässigkeit, können Sie zwei flash-Partitionen (oder auch Pommes Frites), eine mit der aktuellen Konfiguration und mit der neuen Konfiguration.Dann verwenden Sie einen hardware-watchdog wird zurückgesetzt das Gerät und schaltet die aktive boot-flash-partition in die "Letzte als funktionierend bekannte" Konfiguration.

Mindestens zwei Partitionen.Ich würde vorschlagen 4

  • boot

  • Alternative boot -

  • Programm-Daten-backup

  • Programm-volatile data

Grub-fallback-Booten Booten Alternative, falls Booten schlägt fehl.

Also, wenn das update fehlschlägt, wird die Alternative funktioniert.

NIE aktualisieren den boot-loader.

Wenn die Daten-partition geröstet, formatieren, kopieren Sie die backup-Daten-partition.

Jetzt können Sie nicht scheitern, wenn die flash-Festplatte stirbt.Wenn Sie die Verwendung von COTS-hardware und der Datenträger wurde, sagen, Compact flash, Sie könnte haben eine physisch isolierte backup auf sagen, ein kleiner USB-Stick.

IMHO jedem update, das ist nicht atomar brechen können das system-oder machen den check für Konsistenz ziemlich schwierig.Ich Stimme zu, dass die Aktualisierung der Bootloader muss vermieden werden, da es nicht ausgeschaltet wird, sicher.In der Regel, einen Hersteller wollen ein update von Firmware-x.x.x auf version y.y.y, ohne nervig, wenn kernel und/oder eine einzelne Datei aktualisiert wurde.Die Aktualisierung können einzelne Dateien zu einem Alptraum für die service, weil es ist sehr schwer zu verstehen, was läuft auf Kunden-hardware.Vielleicht mischen Sie ein dual-copy-Ansatz (Anwendung redundant) mit einem single-copy-Ansatz.Ich denke, dass dies nicht viel helfen, weil die Integrität des Systems erfolgt durch die schwaches Glied in der Kette.Wenn ein update des root-Dateisystems fehlschlägt, ist es nicht wichtig, dass die Anwendung dupliziert.

Ein dual-Kopie Vorgehen kann gewährleisten ein update ohne out-of-service, wenn Sie dies benötigen.Aber es erfordert eine Menge von Ressourcen, da alle Komponenten dupliziert werden müssen.Persönlich benutze ich einen fallback-Ansatz, bei dem eine kleine rootfs im RAM gestartet wird, wenn die Haupt-Anwendung schlägt fehl, oder wenn das Letzte update war nicht erfolgreich.Das fallback-system, automatisch gestartet, indem der bootloader, wenn etwas schief geht, aktualisieren Sie das system von einem USB-Stick (wenn ein update erforderlich ist).

Ich habe nie gefunden, ein OSS-Projekt, über diese Themen und ich begann vor kurzem eine neue, basierend auf meinen früheren Erfahrungen.Ich habe mehrere Produkte läuft es und meine Kunden sind glücklich mit es.

Vielleicht können Sie einen Blick an ihm nehmen.Finden Sie Quellen für "swupdate" (der name des Projekts) auf github.com/sbabic/swupdate.

Stefano

Ich denke, was Sie versuchen zu erreichen ist Unteilbarkeit des update-Prozesses.Die Atomarität ist wichtig für embedded-Geräte, einer der Gründe hervorgehoben ist power Verlust;aber es könnte andere, wie hardware - /Netzwerk-Probleme.Eine definition, die ich verwenden für die Unteilbarkeit im Rahmen des updates ist:

  • Ein update ist stets entweder vollständig ausgeführt oder gar nicht
  • Keine software-Komponente neben der updater überhaupt sieht die Hälfte installiert update

Für Embedded Linux gibt es verschiedene software-Komponenten, die Sie möglicherweise möchten, zu aktualisieren und verschiedene designs zur Auswahl;es ist ein Papier, auf das hier: https://mender.io/user/pages/04.resources/_white-papers/Software%20Updates.pdf

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