Share via


Cihaz güncelleştirmelerini erteleme

Üst düzey bir uygulama, güncelleştirmenin kritik işlemeyi kesintiye uğratmasını önlemek için Azure Sphere işletim sistemi ve uygulama görüntüleri güncelleştirmelerini geçici olarak erteleyebilir. Örneğin bir mutfak aletindeki Azure Sphere cihazı, kullanım sırasında güncelleştirmeleri erteleyebilir. Uygulama, güncelleştirmeleri erteleme fırsatı elde etmek için güncelleştirme bildirimlerine kaydolr. İşletim sistemi güncelleştirmeyi indirdikten sonra uygulamaya bildirimde bulunur ve bu da güncelleştirme ve isteğin ertelenmesiyle ilgili ayrıntıları alabilir.

Ertelenen Güncelleştirme örneği, güncelleştirmeleri ertelemek için bir olay döngüsünün ve sistem olaylarının nasıl kullanılacağını gösterir.

Gerçek zamanlı özellikli uygulamalar (RTApps), güncelleştirme bildirimleri alamaz veya erteleme isteğinde bulunamaz. Üst düzey bir uygulama, cihazdaki RTApps adına güncelleştirme ertelemesini yönetmekle sorumludur.

Erteleme gereksinimleri

Güncelleştirmeleri erteleen uygulamaların uygun üst bilgi dosyalarını içermesi ve uygulama bildirimine erteleme ayarları eklemesi gerekir.

Üst bilgi dosyaları

Projenize eventloop ve sysevent üst bilgilerini ekleyin:

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

Uygulama bildirimi ayarları

Yazılım güncelleştirme olayları hakkında bildirim almak ve bu tür güncelleştirmeleri erteleme fırsatına sahip olmak için bir uygulama, uygulama bildirim dosyasında iki özellik içerir:

  • SystemEventNotifications
  • SoftwareUpdateDeferral

Sistem güncelleştirme olaylarının bildirimlerini almak için true app_manifest.json dosyasında SystemEventNotifications alanını olarak ayarlayın. Uygulamanın Bildirim mekanizmasında açıklandığı gibi olay bildirimlerine de kaydolması gerekir. Uygulamanın güncelleştirmeleri ertelemesini true ve sürdürmesini sağlamak için SoftwareUpdateDeferral olarak ayarlayın.

Aşağıda hem bildirimi hem de ertelemeyi etkinleştirmek için gereken app_manifest.json ayarları gösterilmektedir:

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

Bildirim mekanizması

Azure Sphere, bir olay bildirimi ve olay döngüsü mekanizması aracılığıyla güncelleştirme ertelemeyi destekler. Uygulama, uygulamanın bekleyen olaylara bildirildiği tek iş parçacıklı bir nesne olan bir EventLoopoluşturur.

Bildirim almak için bir uygulama SysEvent_RegisterForEventNotifications çağırarak şu parametreleri geçirir:

  • Olay döngüsü işaretçisi
  • Uygulamanın bildirim istediği olayları belirten bir eventBitmask
  • Uygulama tanımlı geri çağırma işlevinin işaretçisi
  • Geri çağırmaya geçirilen isteğe bağlı bağlam işaretçisi

İş parçacığı başına SysEvent_RegisterForEventNotifications ile yalnızca bir EventLoop nesne kullanılabilir. Farklı EventLoop bir nesneyle SysEvent_RegisterForEventNotifications ikinci bir çağrı başarısız olur.

Kayıt sonrasında uygulama EventLoop_Run çağırır ve bir olayın durumu değiştiyse geri çağırma işlevini çağırır. Geri çağırma işlevi, olayın türünü tanımlayan bir SysEvent_Events değeri alır. Buna karşılık geri arama, olayın bir işletim sistemi veya uygulama güncelleştirmesi olup olmadığını ve güncelleştirmenin ne kadar ertelenebileceğini öğrenmek için SysEvent_Info_GetUpdateData çağırır. Uygulama daha sonra olay bildiriminin nasıl işleneceğini belirleyebilir.

Azure Sphere, her güncelleştirme olayı için birkaç durum bildirimi gönderebilir:

Durum Açıklama
SysEvent_Status_Pending Erteleme fırsatıyla bir güncelleştirme olayının gerçekleşeceğini belirten 10 saniyelik bir uyarı.
SysEvent_Status_Final Erteleme fırsatı olmadan bir güncelleştirme olayının gerçekleşeceğini belirten 10 saniyelik bir uyarı.
SysEvent_Status_Deferred Daha önce bekleyen olay ertelendi ve daha sonra gerçekleşecek.
SysEvent_Status_Complete Yazılım güncelleştirme işlemi tamamlandı. Bu olay bildirimi yalnızca uygulama güncelleştirmeleri için gönderilir.

Bir uygulama yalnızca SysEvent_Status_Pending bildirimi aldıktan sonra erteleme isteğinde bulunabilir. Güncelleştirmenin hemen gerçekleşmesine izin vermek için uygulama bildirimi yoksayabilir.

Güncelleştirmeyi ertelemek için uygulama, güncelleştirmeyi ertelemek için dakika sayısını geçirerek SysEvent_DeferEvent çağırır. bir işletim sistemi güncelleştirmesi için en fazla erteleme 1440 dakikadır (24 saat). Uygulama güncelleştirmesi için erteleme süresi üst sınırı 10.020 dakikadır (167 saat).

Bir uygulama , SysEvent_ResumeEvent çağırarak güncelleştirmeyi erken erteleyebilir. Bir uygulama veya işletim sistemi güncelleştirmesi için başarılı bir SysEvent_ResumeEvent çağrısı bildirim işlemini yeniden başlatır ve böylece yeni bir SysEvent_Status_Pending bildirimi gönderir. Uygulama, böyle bir bildirim alınana kadar SysEvent_DeferEvent yeniden aramamalıdır.

Uygulama SysEvent_Status_Final bildirimini aldığında, Azure Sphere işletim sisteminden bir SIGTERM sinyali almaya hazır olmalıdır. SIGTERM sinyali alındığında, uygulamanın son temizleme ve çıkışı gerçekleştirmesi gerekir. SIGTERM alınmadan önce uygulamadan çıkılmamalıdır; aksi takdirde, SIGTERM gönderilmeden önce yeniden başlatılabilir. bir işletim sistemi güncelleştirmesi için, uygulama cihaz yeniden başlatmadan önce gereken temizleme işlemini yapmalıdır. Bir uygulama güncelleştirmesi için, üst düzey uygulama veya cihazdaki herhangi bir uygulama yeniden başlatılmadan önce gereken her şeyi yapmalıdır. Uygulama bildirimi şu anda hangi uygulamanın güncelleştirildiğini belirtmemektedir.

Bildirim artık gerekli olmadığında, uygulamanın SysEvent_UnregisterForEventNotifications çağırması ve ardından olay döngüsü nesnesi için ayrılan belleği serbest bırakmak için EventLoop_Close gerekir. Tüm olay bildirimlerinin kaydı kaldırıldıktan sonra uygulamanın yeni EventLoop bir nesne kullanabileceğini unutmayın.