Megosztás a következőn keresztül:


Eszközfrissítések késleltetése

A magas szintű alkalmazások ideiglenesen késleltethetik az Azure Sphere operációs rendszer frissítéseit és az alkalmazásképeket, hogy a frissítés ne szakítsa meg a kritikus feldolgozást. A konyhai berendezésekben található Azure Sphere-eszközök például késleltethetik a frissítéseket a használat során. A frissítések elhalasztásához az alkalmazás regisztrál a frissítési értesítésekre. Miután az operációs rendszer letöltötte a frissítést, értesíti az alkalmazást, amely lekérheti a frissítés részleteit, és halasztást kérhet.

A Késleltetett frissítés minta bemutatja, hogyan használható eseményhurok és rendszeresemények a frissítések elhalasztására.

A valós idejű kompatibilis alkalmazások (RTApps) nem fogadhatnak frissítési értesítéseket vagy kérelmek elhalasztásait. Egy magas szintű alkalmazás felelős a frissítési halasztás kezeléséért az rtApps nevében az eszközön.

Halasztásra vonatkozó követelmények

A frissítéseket elhalasztó alkalmazásoknak tartalmazniuk kell a megfelelő fejlécfájlokat, és hozzá kell adni a halasztás beállításait az alkalmazásjegyzékhez.

Fejlécfájlok

Adja meg az eventloop és a sysevent fejléceket a projektben:

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

Alkalmazásjegyzék beállításai

Ahhoz, hogy értesüljön a szoftverfrissítési eseményekről, és hogy lehetőség legyen az ilyen frissítések elhalasztására, az alkalmazás két képességet tartalmaz az alkalmazás jegyzékfájljában :

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Állítsa a SystemEventNotifications mezőt true a app_manifest.json fájlban a rendszerfrissítési események értesítéseinek fogadásához. Az alkalmazásnak regisztrálnia kell az eseményértesítésekre is az értesítési mechanizmusban leírtak szerint. Állítsa a SoftwareUpdateDeferral beállítást úgy true , hogy az alkalmazás elhalaszthassa és folytathassa a frissítéseket.

Az alábbiakban az értesítés és a halasztás engedélyezéséhez szükséges app_manifest.json beállítások láthatók:

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

Értesítési mechanizmus

Az Azure Sphere támogatja a frissítési halasztást egy eseményértesítési és eseményhurok-mechanizmussal. Az alkalmazás létrehoz egy EventLoopegyszálú objektumot, amelyen keresztül az alkalmazás értesítést kap a függőben lévő eseményekről.

Az értesítések fogadásához egy alkalmazás meghívja SysEvent_RegisterForEventNotifications, és átadja az alábbi paramétereket:

  • Az eseményhurok mutatója
  • Egy eventBitmask , amely meghatározza azokat az eseményeket, amelyekről az alkalmazás értesítést kér
  • Mutató egy alkalmazás által definiált visszahívási függvényre
  • A visszahívásnak átadott nem kötelező környezeti mutató

Szálonként csak egy EventLoop objektum használható SysEvent_RegisterForEventNotifications . Egy másik EventLoop objektummal rendelkező SysEvent_RegisterForEventNotifications második hívása sikertelen lesz.

A regisztráció után az alkalmazás meghívja EventLoop_Run, amely meghívja a visszahívási függvényt, ha egy esemény állapota megváltozott. A visszahívási függvény egy SysEvent_Events értéket kap, amely azonosítja az esemény típusát. A visszahívás viszont meghívja SysEvent_Info_GetUpdateData , hogy megtudja, az esemény operációs rendszer vagy alkalmazásfrissítés-e, és hogy mennyi ideig késleltethető a frissítés. Az alkalmazás ezután meghatározhatja, hogyan kezelje az eseményértesítést.

Az Azure Sphere több állapotértesítést is küldhet minden frissítési eseményhez:

Állapot Leírás
SysEvent_Status_Pending 10 másodperces figyelmeztetés frissítési esemény bekövetkeztéről, halasztás lehetőségével.
SysEvent_Status_Final 10 másodperces figyelmeztetés arról, hogy frissítési esemény következik be, de nincs lehetőség a halasztásra.
SysEvent_Status_Deferred A korábban függőben lévő eseményt elhalasztottuk, és később fog bekövetkezni.
SysEvent_Status_Complete A szoftverfrissítési folyamat befejeződött. Ezt az eseményértesítést csak alkalmazásfrissítések esetén küldi el a rendszer.

Az alkalmazások csak akkor kérhetnek halasztást, ha SysEvent_Status_Pending értesítést kapnak. A frissítés azonnali engedélyezéséhez az alkalmazás figyelmen kívül hagyhatja az értesítést.

A frissítés elhalasztásához az alkalmazás meghívja SysEvent_DeferEvent, és átadja a frissítés elhalasztásának percszámát. Operációsrendszer-frissítés esetén a maximális halasztás 1440 perc (24 óra). Alkalmazásfrissítés esetén a maximális halasztási időszak 10 020 perc (167 óra).

Az alkalmazások a SysEvent_ResumeEvent meghívásával idő előtt le tudják állítani a frissítési halasztást. Alkalmazás- vagy operációsrendszer-frissítés esetén a sikeres SysEvent_ResumeEvent-hívás újraindítja az értesítési folyamatot, és így új SysEvent_Status_Pending értesítést küld. Az alkalmazás nem hívhatja meg újra SysEvent_DeferEvent , amíg nem kapott ilyen értesítést.

Amikor az alkalmazás megkapja a SysEvent_Status_Final értesítést, fel kell készülnie arra, hogy SIGTERM-jelet fogad az Azure Sphere operációs rendszertől. A SIGTERM-jel fogadásakor az alkalmazásnak végre kell hajtania a végleges tisztítást és kilépést. Az alkalmazásnak nem szabad kilépnie a SIGTERM fogadása előtt; ellenkező esetben a SIGTERM elküldése előtt újraindulhat. Operációsrendszer-frissítés esetén az alkalmazásnak az eszköz újraindítása előtt minden szükséges tisztítást el kell végeznie. Alkalmazásfrissítés esetén a magas szintű alkalmazásnak minden szükséges műveletet meg kell tennie, mielőtt újraindul az eszközön lévő bármely más alkalmazás. Az alkalmazásértesítés jelenleg nem határozza meg, hogy melyik alkalmazást frissítik.

Ha már nincs szükség értesítésre, az alkalmazásnak meg kell hívnia SysEvent_UnregisterForEventNotifications , majd EventLoop_Close , hogy felszabadítsa az eseményhurok-objektum számára lefoglalt memóriát. Vegye figyelembe, hogy az összes eseményértesítés regisztrációjának törlése után az alkalmazás használhat egy új EventLoop objektumot.