Udostępnij za pośrednictwem


Odroczenie aktualizacji urządzeń

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

Aplikacja wysokiego poziomu może tymczasowo odroczyć aktualizacje systemu operacyjnego usługi Azure Sphere i obrazów aplikacji, aby zapobiec przerwaniu przetwarzania krytycznego przez aktualizację. Urządzenie usługi Azure Sphere w urządzeniu kuchennym może na przykład odroczyć aktualizacje podczas użytkowania. Aby umożliwić odroczenie aktualizacji, aplikacja rejestruje się w celu otrzymywania powiadomień o aktualizacji. Po pobraniu aktualizacji system operacyjny powiadamia aplikację, która może uzyskać szczegółowe informacje na temat aktualizacji i odroczenia żądania.

W przykładzie odroczonej aktualizacji pokazano, jak odroczyć aktualizacje za pomocą pętli zdarzeń i zdarzeń systemowych.

Aplikacje obsługujące w czasie rzeczywistym (RTApps) nie mogą odbierać powiadomień o aktualizacji ani odroczenia żądań. Aplikacja wysokiego poziomu jest odpowiedzialna za zarządzanie odroczeniem aktualizacji w imieniu rtApps na urządzeniu.

Wymagania dotyczące odroczenia

Aplikacje, które odroczają aktualizacje, muszą zawierać odpowiednie pliki nagłówka i dodawać ustawienia odroczenia do manifestu aplikacji.

Pliki nagłówkowe

Uwzględnij nagłówki eventloop i sysevent w projekcie:

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

Ustawienia manifestu aplikacji

Aby otrzymywać powiadomienia o zdarzeniach aktualizacji oprogramowania i mieć możliwość odroczenia takich aktualizacji, aplikacja zawiera dwie możliwości w pliku manifestu aplikacji:

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Ustaw pole SystemEventNotifications na true wartość w pliku app_manifest.json, aby otrzymywać powiadomienia o zdarzeniach aktualizacji systemu. Aplikacja musi również zarejestrować się w celu otrzymywania powiadomień o zdarzeniach, zgodnie z opisem w artykule Mechanizm powiadomień. Ustaw wartość SoftwareUpdateDeferral , aby true umożliwić aplikacji odroczenie i wznowienie aktualizacji.

Poniżej przedstawiono ustawienia app_manifest.json wymagane do włączenia zarówno powiadomień, jak i odroczenia:

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

Mechanizm powiadamiania

Usługa Azure Sphere obsługuje odroczenie aktualizacji za pomocą mechanizmu powiadamiania o zdarzeniach i pętli zdarzeń. Aplikacja tworzy obiekt , który jest obiektem EventLoopjednowątkowym, za pomocą którego aplikacja jest powiadamiana o oczekujących zdarzeniach.

Aby otrzymywać powiadomienia, aplikacja wywołuje SysEvent_RegisterForEventNotifications, przekazując następujące parametry:

  • Wskaźnik do pętli zdarzeń
  • Element eventBitmask określający zdarzenia, dla których aplikacja żąda powiadomienia
  • Wskaźnik do funkcji wywołania zwrotnego zdefiniowanego przez aplikację
  • Opcjonalny wskaźnik kontekstu przekazywany do wywołania zwrotnego

Tylko jeden EventLoop obiekt może być używany z SysEvent_RegisterForEventNotifications na wątek. Drugie wywołanie SysEvent_RegisterForEventNotifications z innym EventLoop obiektem zakończy się niepowodzeniem.

Po rejestracji aplikacja wywołuje EventLoop_Run, która wywołuje funkcję wywołania zwrotnego, jeśli zdarzenie uległo zmianie stanu. Funkcja wywołania zwrotnego odbiera wartość SysEvent_Events , która identyfikuje typ zdarzenia. Z kolei wywołania zwrotne SysEvent_Info_GetUpdateData , aby dowiedzieć się, czy zdarzenie jest aktualizacją systemu operacyjnego lub aplikacji i jak długo można odroczyć aktualizację. Aplikacja może następnie określić sposób obsługi powiadomienia o zdarzeniu.

Usługa Azure Sphere może wysyłać kilka powiadomień o stanie dla każdego zdarzenia aktualizacji:

Stan opis
SysEvent_Status_Pending 10-sekundowe ostrzeżenie o wystąpieniu zdarzenia aktualizacji z możliwością odroczenia.
SysEvent_Status_Final 10-sekundowe ostrzeżenie o wystąpieniu zdarzenia aktualizacji bez możliwości odroczenia.
SysEvent_Status_Deferred Wcześniej oczekujące zdarzenie zostało odroczone i nastąpi później.
SysEvent_Status_Complete Proces aktualizacji oprogramowania został ukończony. To powiadomienie o zdarzeniu jest wysyłane tylko w przypadku aktualizacji aplikacji.

Aplikacja może zażądać odroczenia dopiero po otrzymaniu powiadomienia SysEvent_Status_Pending . Aby umożliwić natychmiastowe wystąpienie aktualizacji, aplikacja może zignorować powiadomienie.

Aby odroczyć aktualizację, aplikacja wywołuje SysEvent_DeferEvent, przekazując liczbę minut odroczenia aktualizacji. W przypadku aktualizacji systemu operacyjnego maksymalny odroczenie wynosi 1440 minut (24 godziny). W przypadku aktualizacji aplikacji maksymalny okres odroczenia wynosi 10 020 minut (167 godzin).

Aplikacja może zakończyć odroczenie aktualizacji przedwcześnie, wywołując SysEvent_ResumeEvent. W przypadku aktualizacji aplikacji lub systemu operacyjnego pomyślne wywołanie SysEvent_ResumeEvent ponowne uruchomienie procesu powiadamiania, a tym samym wysłanie nowego powiadomienia SysEvent_Status_Pending . Aplikacja nie powinna ponownie wywoływać SysEvent_DeferEvent , dopóki nie otrzyma takiego powiadomienia.

Gdy aplikacja otrzyma powiadomienie SysEvent_Status_Final, powinna przygotować się do odbierania sygnału SIGTERM z systemu operacyjnego usługi Azure Sphere. Po odebraniu sygnału SIGTERM aplikacja powinna wykonać końcowe czyszczenie i zakończenie. Aplikacja nie powinna zostać zakończona przed odebraniem SIGTERM; w przeciwnym razie można go ponownie uruchomić przed wysłaniem SIGTERM. W przypadku aktualizacji systemu operacyjnego aplikacja powinna wykonać czyszczenie wymagane przed ponownym uruchomieniem urządzenia. W przypadku aktualizacji aplikacji aplikacja wysokiego poziomu powinna zrobić wszystko, co jest konieczne, zanim zostanie ponownie uruchomiona lub jakakolwiek inna aplikacja na urządzeniu. Powiadomienie aplikacji nie określa obecnie, która aplikacja jest aktualizowana.

Gdy powiadomienie nie jest już wymagane, aplikacja powinna wywołać SysEvent_UnregisterForEventNotifications, a następnie EventLoop_Close zwolnić pamięć przydzieloną dla obiektu pętli zdarzeń. Należy pamiętać, że po wyrejestrowyniu wszystkich powiadomień o zdarzeniach aplikacja może użyć nowego EventLoop obiektu.