Wir werden eine ARM-Karte mit einem integrierten GSM-Modem erstellen.
Wir möchten die ARM-Firmware drahtlos aktualisieren können.
Gibt es dafür eine gute, zuverlässige Open Source-Lösung?
Wenn nicht, gibt es ein kostenpflichtiges Betriebssystem mit dieser Funktion?
Antworten:
Mir sind keine vorgefertigten Lösungen bekannt, aber ich werde beschreiben, wie ich sie in einem Projekt umgangen habe. Es ist nicht völlig "unbrickable", aber ich bin mir nicht bewusst, dass es bei Tausenden von Upgrades fehlschlägt. Für diese Anwendung wäre eine sehr niedrige Ausfallrate immer noch billiger als der Zugriff auf die Einheiten.
Die Hauptanwendung verfügt über drei zusätzliche Pakettypen, die dem normalen Kommunikationsprotokoll hinzugefügt wurden. Dazu gehören die Fehlererkennung und eine Wiederholungsstrategie:
Ein Befehl zum Starten der Firmware-Aktualisierung löscht einen reservierten Speicherbereich in einem externen SPI-Flash. Es wird ein Fehler zurückgegeben, wenn das Gerät mit seiner Pufferbatterie betrieben wird oder wenn es mit externer Stromversorgung betrieben wird, der Ladezustand der Batterie jedoch unter 25% liegt.
Ein Schreibblockbefehl akzeptiert eine Offset-Adresse und Daten, die in kleinen Blöcken in den externen Flash-Speicher geschrieben werden. Das übergeordnete Protokoll sorgt für die Fehlererkennung und Neuübertragung. Nachdem jeder Block geschrieben wurde, wird er zurückgelesen und überprüft, bevor der Befehl bestätigt wird.
Ein Befehl zum Beenden der Firmware-Aktualisierung enthält die Länge, die die empfangene Firmware zusammen mit einem CRC32 des gesamten Images zur weiteren Überprüfung haben sollte. Wenn dies mit dem Inhalt des externen Flash-Speichers übereinstimmt und die Energiebedingungen immer noch in Ordnung sind, wird CRC32 zusammen mit einer „magischen Nummer“ in einen EEPROM-Bereich übertragen, um anzuzeigen, dass ein Firmware-Update aussteht.
In der Hauptanwendung wird eine harte Schleife ausgeführt, um einen Neustart des Watchdogs zu erzwingen.
Der Bootloader (der sich in einem schreibgeschützten Bereich des ARM-Flash befindet) erkennt die magische Nummer im EEPROM und überprüft erneut den CRC32 des Images. Wenn alles in Ordnung ist, wird das Bild von externem Flash in den Hauptprogrammbereich des ARM-Flash übertragen.
Die ausstehenden Upgrade-Informationen werden aus dem EEPROM gelöscht und eine harte Schleife erzwingt einen weiteren Neustart. Diesmal startet der Bootloader die Hauptanwendung normal.
Obwohl ich noch nie gesehen habe, dass die Update-Phase beim Testen neuer Firmware-Versionen vor der Bereitstellung fehlschlägt, ist die Verwendung dieser Methode von entscheidender Bedeutung. Wenn eine neue Version keine Verbindung zum GSM-Netz herstellen und zukünftige Update-Befehle akzeptieren kann, ist ein Firmware-Update vor Ort erforderlich.
quelle
Führen Sie Linux oder ein RTOS oder Bare Metal aus? 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.
quelle