Sdílet prostřednictvím


Odložit aktualizace zařízení

Důležité

Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.

Aplikace vysoké úrovně může dočasně odložit aktualizace operačního systému Azure Sphere a na image aplikací, aby zabránila přerušení důležitého zpracování aktualizace. Zařízení Azure Sphere v kuchyňském zařízení může například během používání odložit aktualizace. Aby aplikace měla možnost odložit aktualizace, zaregistruje se k oznámením o aktualizacích. Po stažení aktualizace operačního systému upozorní aplikaci, která může získat podrobnosti o aktualizaci a odložení požadavku.

Ukázka Deferred Update ukazuje, jak pomocí smyčky událostí a systémových událostí odložit aktualizace.

Aplikace podporující v reálném čase (RTApps) nemůžou přijímat oznámení o aktualizaci ani odložit žádosti. Aplikace vysoké úrovně zodpovídá za správu odložení aktualizací jménem RTApps na zařízení.

Požadavky na odložení

Aplikace, které odloží aktualizace, musí obsahovat příslušné soubory hlaviček a přidat do manifestu aplikace odložení nastavení.

Soubory hlaviček

Do projektu zahrňte hlavičky eventloop a sysevent:

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

Nastavení manifestu aplikace

Pokud chcete dostávat oznámení o událostech aktualizace softwaru a mít možnost odložit tyto aktualizace, aplikace obsahuje v souboru manifestu aplikace dvě možnosti:

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Nastavte v souboru app_manifest.json pole true SystemEventNotifications tak, aby dostávalo oznámení o událostech aktualizace systému. Aplikace musí také zaregistrovat oznámení událostí, jak je popsáno v mechanismu oznámení. Nastavte SoftwareUpdateDeferral tak, aby true aplikace odložil a obnovil aktualizace.

Následující příklad ukazuje nastavení app_manifest.json vyžadovaná k povolení oznámení i odložení:

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

Mechanismus oznámení

Azure Sphere podporuje odložení aktualizací prostřednictvím oznámení událostí a mechanismu smyčky událostí. Aplikace vytvoří objekt EventLoops jedním vláknem, prostřednictvím kterého je aplikace upozorněna na čekající události.

Pokud chcete dostávat oznámení, aplikace volá SysEvent_RegisterForEventNotifications a předává tyto parametry:

  • Ukazatel na smyčku událostí
  • Určuje eventBitmask události, pro které aplikace požaduje oznámení.
  • Ukazatel na funkci zpětného volání definované aplikací
  • Volitelný kontextový ukazatel předaný zpětnému volání

S SysEvent_RegisterForEventNotifications na vlákno lze použít pouze jeden EventLoop objekt. Druhé volání SysEvent_RegisterForEventNotifications s jiným EventLoop objektem selže.

Po registraci aplikace volá EventLoop_Run, která vyvolá funkci zpětného volání, pokud událost změnila stav. Funkce zpětného volání obdrží SysEvent_Events hodnotu, která identifikuje typ události. Volání zpětného volání SysEvent_Info_GetUpdateData zjistit, jestli se jedná o událost operačního systému nebo aktualizace aplikace a jak dlouho může být aktualizace odložena. Aplikace pak může určit, jak zpracovat oznámení události.

Azure Sphere může posílat několik oznámení o stavu pro každou událost aktualizace:

Status Popis
SysEvent_Status_Pending 10sekundové upozornění, že dojde k události aktualizace s příležitostí odložit.
SysEvent_Status_Final 10sekundové upozornění, že dojde k události aktualizace bez příležitosti k odložení.
SysEvent_Status_Deferred Dříve čekající událost byla odložena a nastane později.
SysEvent_Status_Complete Proces aktualizace softwaru je dokončený. Toto oznámení události se odesílá pouze pro aktualizace aplikací.

Aplikace může požádat o odložení až po přijetí oznámení SysEvent_Status_Pending . Aby aktualizace mohla proběhnout okamžitě, může aplikace oznámení ignorovat.

Pokud chcete aktualizaci odložit, aplikace volá SysEvent_DeferEvent a předává počet minut odložit aktualizaci. U aktualizace operačního systému je maximální odložení 1440 minut (24 hodin). U aktualizace aplikace je maximální doba odložení 10 020 minut (167 hodin).

Aplikace může předčasně ukončit odložení aktualizace voláním SysEvent_ResumeEvent. U aplikace nebo aktualizace operačního systému úspěšné volání SysEvent_ResumeEvent restartuje proces oznámení a odešle tak nové oznámení SysEvent_Status_Pending. Aplikace by neměla volat SysEvent_DeferEvent znovu, dokud takové oznámení nepřišla.

Když aplikace obdrží oznámení SysEvent_Status_Final , měla by se připravit na příjem signálu SIGTERM z operačního systému Azure Sphere. Po přijetí signálu SIGTERM by aplikace měla provést konečné vyčištění a ukončení. Aplikace by se neměla ukončit před přijetí SIGTERM; jinak může být restartován před odesláním SIGTERM. V případě aktualizace operačního systému by aplikace měla před restartováním zařízení provést jakékoli vyčištění. V případě aktualizace aplikace by aplikace vysoké úrovně měla udělat cokoli potřebného před restartováním nebo jakékoli jiné aplikace v zařízení. Oznámení aplikace aktuálně neurčovalo, která aplikace se aktualizuje.

Pokud už oznámení nepotřebujete, měla by aplikace volat SysEvent_UnregisterForEventNotifications a pak EventLoop_Close uvolnit paměť přidělenou objektu smyčky událostí. Všimněte si, že po zrušení registrace všech oznámení událostí může aplikace používat nový EventLoop objekt.