Wir werden ein ARM-Board mit einem integrierten GSM-Modem erstellen.
Wir möchten in der Lage sein, die ARM-Firmware drahtlos zu aktualisieren.
Gibt es dafür eine gute, zuverlässige Open-Source-Lösung?
Wenn nicht, gibt es ein kostenpflichtiges Betriebssystem mit dieser Funktion?
Mir sind keine vorgefertigten Lösungen bekannt, aber ich werde beschreiben, wie ich es in einem Projekt umgangen habe. Es ist nicht vollständig "unbrickable", aber ich bin mir nicht bewusst, dass es über Tausende von Upgrades fehlschlägt. Für diese Anwendung wäre eine sehr niedrige Ausfallrate immer noch billiger, als sich Zugang zu den Einheiten verschaffen zu müssen.
Die Hauptanwendung verfügt über drei zusätzliche Pakettypen, die zu ihrem normalen Kommunikationsprotokoll hinzugefügt wurden, das eine Fehlererkennung und eine Wiederholungsstrategie an der Spitze enthält:
Ein Start-Firmware-Update-Befehl löscht einen reservierten Speicherbereich in einem externen SPI-Flash. Es gibt einen Fehler zurück, wenn das Gerät mit seiner Backup-Batterie oder mit externer Stromversorgung betrieben wird, der Ladezustand der Batterie jedoch unter 25 % liegt.
Ein Write-Block-Befehl akzeptiert eine Offset-Adresse und Daten, die in kleinen Blöcken in den externen Flash-Speicher geschrieben werden. Das Protokoll der höheren Ebene kümmert sich um die Fehlererkennung und Neuübertragungen. Nachdem jeder Block geschrieben ist, wird er zurückgelesen und verifiziert, bevor der Befehl bestätigt wird.
Ein Befehl zum Beenden der Firmware-Aktualisierung enthält die Länge, die die empfangene Firmware haben sollte, zusammen mit einem CRC32 des gesamten Abbilds zur weiteren Überprüfung. Wenn dies mit dem Inhalt des externen Flash-Speichers übereinstimmt und die Stromversorgung noch in Ordnung ist, wird die gleiche Länge und CRC32 zusammen mit einer „magischen Zahl“ in einen EEPROM-Bereich übertragen, um anzuzeigen, dass ein Firmware-Update ansteht.
In der Hauptanwendung wird eine harte Schleife ausgeführt, um einen Watchdog-Neustart zu erzwingen.
Der Bootloader (der sich in einem schreibgeschützten Bereich des ARM-Flash befindet) sieht die magische Zahl im EEPROM und überprüft erneut den CRC32 des Images. Wenn alles in Ordnung ist, überträgt es das Image vom externen Flash in den Hauptprogrammbereich des Flash des ARM.
Die ausstehenden Upgrade-Informationen werden aus dem EEPROM gelöscht und eine Hard Loop erzwingt einen weiteren Neustart. Diesmal startet der Bootloader die Hauptanwendung normal.
Obwohl ich noch nie gesehen habe, dass die Update-Phase fehlgeschlagen ist, ist das Testen neuer Firmware-Versionen vor der Bereitstellung bei dieser Methode von entscheidender Bedeutung. Wenn eine neue Version nicht in der Lage ist, sich mit dem GSM-Netz zu verbinden und zukünftige Update-Befehle zu akzeptieren, ist ein Firmware-Update vor Ort erforderlich.
Verwenden Sie Linux oder ein RTOS oder Bare Metal? Wenn Sie Debian verwenden, können Sie einen Snapshot des aktuellen Dateisystems erstellen, ein Upgrade über "apt-get" durchführen und die Änderungen beibehalten oder rückgängig machen, je nachdem, ob es funktioniert hat oder nicht.
Klatsch
Dorn
Hottips
Wouter van Ooijen
Hermann Eche
Wouter van Ooijen
Kaz