Freigeben über


Zurückstellen von Geräteupdates

Wichtig

Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.

Eine allgemeine Anwendung kann Updates des Azure Sphere-Betriebssystems und von Anwendungsimages vorübergehend zurückstellen, um zu verhindern, dass das Update wichtige Verarbeitungsvorgänge unterbricht. Ein Azure Sphere-Gerät in einem Küchengerät könnte z.B. Updates während des Gebrauchs zurückstellen. Um die Möglichkeit zum Zurückstellen von Updates zu nutzen, registriert sich die App für Updatebenachrichtigungen. Nachdem das Betriebssystem das Update heruntergeladen hat, wird die Anwendung benachrichtigt, die Details zum Update und zur Anforderungszurückstellung abrufen kann.

Im Beispiel Zurückgestelltes Update wird gezeigt, wie Sie eine Ereignisschleife und Systemereignisse verwenden, um Updates zurückzustellen.

Echtzeitfähige Anwendungen (RTApps) können keine Updatebenachrichtigungen oder Anforderungszurückstellungen empfangen. Eine allgemeine App ist für die Verwaltung der Updatezurückstellung im Namen von RTApps auf dem Gerät zuständig.

Zurückstellungsanforderungen

Für Anwendungen, die Updates zurückstellen, müssen die entsprechenden Headerdateien einbezogen und dem Anwendungsmanifest Zurückstellungseinstellungen hinzugefügt werden.

Headerdateien

Beziehen Sie die eventloop- und sysevent-Header in das Projekt ein:

 #include <applibs/eventloop.h>
 #include <applibs/sysevent.h>

Einstellungen für das Anwendungsmanifest

Um über Softwareupdateereignisse benachrichtigt zu werden und die Möglichkeit zu haben, solche Updates zurückzustellen, enthält eine Anwendung zwei Funktionen in der Anwendungsmanifestdatei:

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Legen Sie das Feld SystemEventNotifications in der Datei „app_manifest.json“ auf true fest, um Benachrichtigungen zu Systemupdateereignissen zu erhalten. Die Anwendung muss sich auch für Ereignisbenachrichtigungen registrieren, wie unter Benachrichtigungsmechanismus beschrieben. Legen Sie SoftwareUpdateDeferral auf true fest, damit die App Updates zurückstellen und fortsetzen kann.

Im Folgenden werden die Einstellungen der Datei „app_manifest.json“ gezeigt, die zum Aktivieren von Benachrichtigungen und Zurückstellungen erforderlich sind:

"Capabilities": {
        "SystemEventNotifications" : true,
        "SoftwareUpdateDeferral" : true
    }

Benachrichtigungsmechanismus

Azure Sphere unterstützt Updatezurückstellung über einen Ereignisbenachrichtigungs- und einen Ereignisschleifenmechanismus. Die Anwendung erstellt ein EventLoop-Objekt. Dies ist ein Singlethreadobjekt, über das die Anwendung über ausstehende Ereignisse benachrichtigt wird.

Zum Empfangen von Benachrichtigungen ruft eine App SysEvent_RegisterForEventNotifications auf. Dabei werden die folgenden Parameter übergeben:

  • Ein Zeiger auf die Ereignisschleife.
  • Eine Ereignisbitmaske (eventBitmask), die die Ereignisse angibt, für die die App eine Benachrichtigung anfordert.
  • Ein Zeiger auf eine von der App definierte Rückruffunktion.
  • Ein optionaler Kontextzeiger, der an den Rückruf übergeben wird.

Es kann nur ein EventLoop-Objekt mit SysEvent_RegisterForEventNotifications pro Thread verwendet werden. Ein zweiter Aufruf von SysEvent_RegisterForEventNotifications mit einem anderen EventLoop-Objekt schlägt fehl.

Nach der Registrierung ruft die Anwendung EventLoop_Run auf, wodurch die Rückruffunktion aufgerufen wird, wenn sich der Status eines Ereignisses geändert hat. Die Rückruffunktion empfängt einen SysEvent_Events-Wert, der den Ereignistyp identifiziert. Der Rückruf ruft wiederum SysEvent_Info_GetUpdateData auf, um herauszufinden, ob es sich bei dem Ereignis um ein Betriebssystem- oder Anwendungsupdate handelt und wie lange das Update zurückgestellt werden kann. Die App kann dann bestimmen, wie die Ereignisbenachrichtigung behandelt werden soll.

Azure Sphere sendet möglicherweise mehrere Statusbenachrichtigungen für jedes Updateereignis:

Status Beschreibung
SysEvent_Status_Pending Eine 10-Sekunden-Warnung, dass ein Updateereignis auftritt, mit der Möglichkeit, das Ereignis zurückzustellen.
SysEvent_Status_Final Eine 10-Sekunden-Warnung, dass ein Updateereignis auftritt, ohne die Möglichkeit der Zurückstellung.
SysEvent_Status_Deferred Das zuvor ausstehende Ereignis wurde zurückgestellt und wird später ausgeführt.
SysEvent_Status_Complete Der Softwareupdatevorgang ist abgeschlossen. Diese Ereignisbenachrichtigung wird nur für Anwendungsupdates gesendet.

Eine App kann die Zurückstellung erst anfordern, nachdem sie eine SysEvent_Status_Pending-Benachrichtigung empfangen hat. Damit das Update sofort ausgeführt werden kann, kann die Anwendung die Benachrichtigung ignorieren.

Um das Update zurückzustellen, ruft die Anwendung SysEvent_DeferEvent auf und übergibt die Anzahl der Minuten, die das Update zurückgestellt werden soll. Bei einem Betriebssystemupdate beträgt die maximale Zurückstellungsdauer 1.440 Minuten (24 Stunden). Bei einem Anwendungsupdate beträgt die maximale Zurückstellungsdauer 10.020 Minuten (167 Stunden).

Eine Anwendung kann eine Updatezurückstellung vorzeitig beenden, indem SysEvent_ResumeEvent aufgerufen wird. Bei einem Anwendungs- oder Betriebssystemupdate startet ein erfolgreicher Aufruf von SysEvent_ResumeEvent den Benachrichtigungsprozess neu und sendet somit eine neue SysEvent_Status_Pending-Benachrichtigung. Die App sollte SysEvent_DeferEvent erst wieder aufrufen, wenn sie eine solche Benachrichtigung erhalten hat.

Wenn die Anwendung die SysEvent_Status_Final-Benachrichtigung empfängt, sollte sie sich darauf vorbereiten, ein SIGTERM-Signal vom Azure Sphere-Betriebssystem zu empfangen. Wenn das SIGTERM-Signal empfangen wird, sollte die App die endgültige Bereinigung und das Beenden durchführen. Der Antrag sollte nicht beendet werden, bevor der SIGTERM empfangen wird; andernfalls könnte sie neu gestartet werden, bevor sigTERM gesendet wird. Bei einem Betriebssystemupdate sollte die Anwendung vor dem Neustart des Geräts alle erforderlichen Bereinigungsarbeiten durchführen. Für ein Anwendungsupdate sollte die allgemeine Anwendung alle notwendigen Aufgaben erledigen, bevor sie oder eine andere Anwendung auf dem Gerät neu gestartet wird. Die Anwendungsbenachrichtigung gibt aktuell nicht an, welche Anwendung aktualisiert wird.

Wenn die Benachrichtigung nicht mehr erforderlich ist, sollte die App SysEvent_UnregisterForEventNotifications und dann EventLoop_Close aufrufen, um den für das Ereignisschleifenobjekt zugewiesenen Speicher freizugeben. Beachten Sie, dass die App nach dem Aufheben der Registrierung aller Ereignisbenachrichtigungen ein neues EventLoop-Objekt verwenden kann.