Software auf einem Embedded Linux Gerät zu aktualisieren ist spätestens seit Inkrafttreten des EU Cyber Resilience Acts ein wichtiger Teil jedes Embedded Linux Projektes. So werden neue Applikations-Features zum Download angeboten, Bug-Fixes in der Anwendung korrigiert oder Daten und Inhalte auf den neuesten Stand gebracht. Aber auch die Aktualisierung des Betriebssystems samt Linux-Kernel, Bootloader und Treibern ist ein wichtiger Aspekt, um langfristig einen sicheren Betrieb des Geräts gewährleisten zu können. Wie dieser gesamte Software-Stack zusammen mit der Anwendung am besten aktualisiert werden kann, wollen wir in diesem Artikel auf den Grund gehen.
Bevor man generisch über „Software-Updates“ auf einem Embedded Linux System spricht, sollte man definieren, welche Software-Teile es in einem Embedded Linux System gibt:
- Bootloader: Er ist der Einsprungspunkt des Embedded Linux Systems, sobald der Strom eingeschaltet wird, initialisiert die Hardware und startet den Linux Kernel. Der Bootloader kann meist auch einfache externe Dateisysteme mounten (z.B. USB-Update-Sticks) oder einfache Netzwerk-Protokolle zum Flashen einer Partition nutzen, bevor das Linux-Betriebssystem hochgefahren ist. Der Bootloader ist bei Embedded Linux Systemen häufig in einem speziellen Speicherbereich abgelegt.
- Linux Kernel: Hier laufen im Betrieb alle Fäden zusammen: CPU-, RAM- und Dateisystem-Verwaltung, Scheduler,… Der Linux-Kernel wird manchmal separat vom Linux-Filesystem abgelegt (z.B. in einer eigenen Boot-Partition), kann aber auch Teil des Root File Systems sein.
- Root File System: Das komplette Dateisystem des gesamten Linux System mit System-Dateien, allen installierten Bibliotheken und Verzeichnisse für Logs.
- Data Partition: Diese ist optional, aber viele Embedded Linux Systeme haben eine separate Partition, auf welcher nur Anwendungsdaten abgelegt wird. Dies hat auch den Vorteil, dass man das Root-File-System „Readonly“ machen kann und nur die Data-Partition für Anwendungsdaten beschreibbar ist.
- Applikation: Die Applikation ist entweder Teil des Root File Systems oder liegt auf der Data-Partition. Hier kann es sich um einen einzigen Prozess handeln (z.B. eine Qt-Anwendung), oder es handelt sich um mehrere Prozesse, welche über Interprozess-Kommunikation zusammenarbeiten.
- Externe Hardware: Diese ist über Bus-Systeme (z.B. CAN-Bus, Ethernet,..) an die Embedded Linux Platine angeschlossen und soll bei einem Software-Update gegebenenfalls auch aktualisiert werden können.
- Bootable USB update stick / recovery partition
- A/B system updates
- Delta updates
- Container-based updates
- Updates via USB Stick: Wenn eine Online-Verbindung nicht möglich ist, soll ein USB-Stick als Datenquelle für das Update möglich sein.
- Automatische Updates via Internet: Stichwort OTA – Over The Air Software Updates: Das Software-Update kann entweder manuell vom Benutzer angestoßen und durchgeführt werden, oder je nach Möglichkeit können auch automatische Updates aktiviert werden, sodass der Benutzer nur mehr den Zeitpunkt des Neustarts festlegt.
- Cloud Fleet Management: Es soll eine gewisse Plattform zur Administration von Software-Updates in der Cloud zur Verfügung stehen. Hier können dann auch zusätzliche Geräte-Analysedaten, Logs oder Funktionen zur Fernwartung mit abgelegt werden. Häufig gibt es auch die Möglichkeit, dass der Hersteller (falls er die Zustimmung vom Kunden erhält) selbstständig Hot-Fixes bzw. Software-Updates auf das Gerät aufspielen kann. Auch die Möglichkeit von der Ferne Einzelzugriff auf ein Gerät zu erhalten um Fehler zu korrigieren oder dem Benutzer bei einer Fehlersituation zu helfen, wird häufig gleich mit integriert.
- Robustheit: Hier geht es um die Absicherung des Update-Vorgangs selbst. Stichwort hier ist „Fail Safe Update & Rollback“. Sollte während dem Update-Vorgang etwas schiefgehen (z.B. Strom fällt aus), soll es nicht zu einem unbrauchbaren Gerät (bricked device) führen. Stattdessen soll das Gerät erkennen, dass der Update-Vorgang nicht vollständig abgeschlossen werden konnte und nutzt dann die bisher noch funktioniertende Linux-Software am Gerät. In weiterer Folge kann dann das Software-Update erneut gestartet werden.
- Sicherheit: Hier kann man in mindestens drei Kategorien unterteilen:
- Trusted source: Es muss gewährleistet werden, dass Software-Update-Daten nur von einer einzigen vertrauenswürdigen Quelle auf das Gerät kopiert werden können.
- Original: Es muss gewährleistet werden, dass die betriebene Software am Gerät selbst der originalen Herstellersoftware entspricht und nicht (mutwillig) von jemanden verändert wurde. (Siehe auch Secure Boot)
- Confidential: Daten von vertrauenswürdiger Art (insbesondere personenbezogene oder sicherheitsrelevante Informationen) müssen verschlüsselt werden und dürfen nicht über ungesicherte Kanäle transportiert werden.
- Vollständig: Es soll möglich sein sämtliche Linux-System-Teile zu aktualisieren, auch den Bootloader.
- Benutzerfreundlich: Der Software-Update Vorgang soll für den Endbenutzer so angenehm wie möglich umgesetzt werden. Ideal sind Status-Informationen während dem Software-Update-Vorgang inklusive einer groben Zeitabschätzung, wie lange das Update noch dauern wird (Fortschrittsanzeige).
- Integrationsfähig: Idealerweise muss der Benutzer nicht sein gewohntes Software-Umfeld verlassen, um ein Software Update durchzuführen. Ein Click auf den „Software-Update“ Button in den Einstellungen sollte genügen, um einen Update-Vorgang anzustoßen. Dies bedeutet jedoch auch, dass sämtliche Software-Updates auch in die Geräte-Software als Vorgang integriert werden können müssen.
- Anpassbar: Je nach Komplexität des Gerätes ist es unter Umständen notwendig, vor oder nach dem Software Update Vorgang Daten zu exportieren, zu migrieren oder auf neue Datenquellen umzustellen. Die Nutzung von sogenannten „Hooks“ (z.B. pre-install, post-install,…) soll ermöglicht werden.
- Linux-Build-System-Support (=Yocto Support): Es soll möglich sein, ein finales Linux-Image inklusive dem Update System zu bauen.
- Update agents: SWUpdate, RAUC, Swupd, Mender, OSTree, Torizon
- Update Cloud solutions: Mender, Torizon, qbee.io, Balena.io, AWS IoT

