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 EventLoop
s 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.