3. Mai 2023 von Stefano Fiorentino
Wie erleichtern Over-the-Air-Software-Updates das Leben der Entwickler:innen?
Software ist überall. So enthalten beispielsweise Embedded Geräte eine Menge Software. Leider werden Fehler oft erst entdeckt werden, wenn die Software in Betrieb ist. Um dies zu vermeiden, empfehlen wir Ihnen eine FOTA-First-Mentalität (Firmware Over-the-Air).
In diesem Blogbeitrag stelle ich Ihnen eines der am weitesten verbreiteten Frameworks für Firmware-Updates unter Linux vor: SWUpdate. Dieses Framework wird von Stefano Babic gepflegt und ist öffentlich auf GitHub verfügbar. Es wird im Rahmen des Yocto-Projekts verwendet und ermöglicht es Ihrem Team auf einfache Weise, eine Firmware-Update-Strategie für Ihr Produkt zu entwickeln.
Wenn Sie wissen möchten, warum das Yocto-Projekt eine leistungsstarke Lösung ist, lesen Sie den Blogbeitrag meines Kollegen. Sie finden ihn hier.
Übrigens könnte Sie auch unsere Landinpage zum Thema "Embedded-Software-Lösungen von adesso " interessieren.
Als bewährte Best-Practice ist diese Produktfunktion eine der ersten (wenn nicht sogar die erste), die Ihr Produkt haben sollte – daher der Begriff FOTA-first. Auf diese Weise kann Ihr Team das Gerät während der Entwicklung leicht mit neuen Versionen aktualisieren, Ihre QS-Abteilung bleibt auf dem neuesten Stand der Entwicklungen oder der freigegebenen Versionen, die sie überprüfen muss, und als Nebeneffekt testen Sie dieselbe Funktion, den Aktualisierungsprozess selbst, bereits in den frühen Phasen und während der gesamten Produktentwicklung mehrmals.
In der Praxis bedeutet die Aktualisierung der Gerätesoftware darin, dass eine neue Version der Software auf das Gerät aufgespielt wird. Dies wurde in Vergangenheit von Servicetechniker:innen durchgeführt. Ich selbst habe mehrere Software-Updates bei grossen Produktionsanlagen durchgeführt, indem ich die komplette Festplatte mit der alten Software manuell gegen die neue Version ausgetauscht habe. In kleineren Fällen, z.B. bei Verkaufsautomaten, war es üblich, den USB-Stick mit der neuen Software anzuschliessen und den Automaten neu zu starten. Eine vordefinierte Prozedur während des Startvorgangs überprüfte, ob die neuen Softwareupdates auf dem eingesteckten USB-Stick vorhanden waren. Im letzteren Fall, bei dem der im Gerät installierte permanente Speicher unverändert blieb, wurden verschiedene Aktualisierungsstrategien angewandt. Wir konzentrieren uns hier auf die Dual-Copy-Strategie, die wir normalerweise empfehlen, wenn das Gerät über genügend Speicherplatz verfügt.
Mit dem Aufkommen des IoT erhielt dieses Verfahren den Namen Over-The-Air-Update, was bedeutet, dass sowohl die Information über die neue Softwareversion als auch das neue Softwarepaket selbst über das Internet mit dem Gerät geteilt werden (d. h. ohne die Notwendigkeit von Aktivitäten vor Ort). Auch wenn sich der Auslöser und die Art der Informationsübermittlung etwas geändert haben, bleibt die Grundlage der verfügbaren Strategien die gleiche, so dass wir uns eine dieser Strategien gemeinsam ansehen wollen.
Die dual-copy Strategie
Bei dieser Konfiguration ist genügen Speicherplatz für zwei (fast) identische Kopien vorhanden. In diesem Fall können Sie sicherstellen, dass Sie immer eine funktionierende Kopie der Software auf Ihrem Gerät haben. Im Falle eines unerwünschten Ereignisses während des Updates (z. B. eines Stromausfalls) können Sie immer auf die ursprüngliche Version zurückgreifen (d.h. auf die Partition, von der aus Sie das Update gestartet haben).
Um Ihren Usern diese Garantie zu bieten, sollte die Kopie der Aktualisierungssoftware immer mit allen Versionen der Software ausgeliefert werden, immer funktionieren und es sollte auch ein Verfahren geben, um zu wissen, welche Partition gerade läuft. Diese Information kann vom Bootloader geliefert werden, der dafür verantwortlich ist, die richtige Software zu starten und sich möglicherweise von einer Situation zu erholen, in der unsere Software-Aktualisierungsprozedur fehlgeschlagen ist.
Ein Hinweis dazu: Um die Möglichkeit einer Beschädigung des Dateisystems drastisch zu minimieren, empfehlen wir normalerweise ein schreibgeschütztes Dateisystem auf der Arbeitskopie der Software. Dies ist der Hauptgrund, warum in Abbildung 1 neben den beiden Anwendungspartitionen und dem Bootloader auch eine Datenpartition zu sehen ist. Dies ist die einzige Partition, auf die Anwendungen schreiben können, und der richtige Ort, um die benutzerdefinierte Konfiguration des Geräts zu speichern. Dies hat den Nebeneffekt, dass Sie die Firmware so konfigurieren können, dass Sie Ihr Gerät durch einfaches Löschen dieser Datenpartition auf den Herstellungszustand (d.h. auf die Werkseinstellungen) zurücksetzen können.
SWUpdate und das Yocto Project
SWUpdate bietet eine zuverlässige Methode zur Aktualisierung der Software auf einem Embedded System. Das Framework unterstützt automatisch die Dual-Copy-Strategie. Das resultierende Gerät hat die wichtige Eigenschaft, dass die nicht laufende Kopie immer durch die Software aktualisiert werden kann. Der Maintainer des Frameworks hat eine spezielle Yocto-Projekt-kompatible Meta-Schicht veröffentlicht, die es noch einfacher macht, die benötigten Werkzeuge in Ihr Firmware-Image zu integrieren: meta-swupdate. Um noch mehr Entwickler:innen zu helfen, insbesondere jenen, die diese Tools in die Firmware-Lösungen von Geräten integrieren müssen, wurde eine weitere Meta-Schicht veröffentlicht, die meta-swupdate-boards, veröffentlicht. Diese letzte Meta-Schicht enthält die Konfiguration für die Dual-Copy-Strategie für die raspberripi3-Maschine, die ich zur Validierung und zum Schreiben dieses Artikels verwendet habe. Wenn Sie dazu darüber erfahren möchten, lesen Sie bitte hier weiter oder kontaktieren Sie mich und mein Team bei der adesso Schweiz AG.
Mit all diesen Metaebenen, die von den Mitwirkenden des Frameworks zur Verfügung gestellt wurden, war es einfach, eine Demo für ein Firmware-Update zu erstellen. In der Praxis können Sie durch das sichere Kopieren des aktualisierten Images in die beschreibbare Partition (d. h. in die Ordner /tmp oder /data) den von Ihrem Cloud-Anbieter bereitgestellten Auslöser (z. B. die Benachrichtigung über eine Zwillingsänderung des Geräts im Azure IoT Hub) und den Download der neuen Firmware in einen bestimmten Ordner simulieren (dies war für diese Demo nicht relevant). Sobald Sie die neue Firmware-Version irgendwo auf dem Gerät gespeichert haben, können Sie den swupdate-Client verwenden, um das Update von Daemon anzufordern, und sonst nichts. SWUpdate verwaltet die eigentliche Firmware-Kopie in der richtigen Partition und den Neustart in der korrekten, aktualisierten Kopierpartition.
Fazit
Die Erstellung eines Firmware-Images war noch nie so einfach. Um die Schwierigkeiten bei der Implementierung eines benutzerdefinierten Software-Aktualisierungsverfahrens zu vermeiden, das Leben der Entwickler:innen zu erleichtern und Zeit für die Konzentration auf die eigentliche Geschäftslogik der Anwendung zu gewinnen, ist es ein Muss, die nächste Produktentwicklung mit der Implementierung der gewählten Software-Aktualisierungsstrategie zu beginnen. Die Nutzung all dieser von der Community unterstützten Best-Practices-Implementierungen wird Ihrem Team helfen, sicherere und wartbare Produkte termingerecht auf den Markt zu bringen. Wenn Sie an einer Live-Demo oder einem praktischen Workshop interessiert sind, kontaktieren Sie uns gerne.