OTA güncellemelerini uygulayın

Kablosuz (OTA) güncellemeleri uygulamak için bootloader'ın, başlatma sırasında bir kurtarma RAM diskine erişebilmesi gerekir. Cihaz, değiştirilmemiş AOSP kurtarma görüntüsü kullanıyorsa bootloader, misc bölümündeki ilk 32 baytı okur. Buradaki veriler boot-recovery ile eşleşirse bootloader recovery görüntüsünde yüklenir. Bu yöntem, bekleyen tüm kurtarma çalışmalarını (örneğin, OTA uygulama veya verileri kaldırma) tamamlama işlemine devam edilmesini sağlar.

Kurtarma işlemi ve bootloader için kullanılan Flash'taki bir bloğun içeriği hakkında ayrıntılar için bootable/recovery/bootloader_message/bootloader_message.h sayfasına bakın.

A/B güncellemesi olan cihazlar

A/B güncellemelerini kullanan cihazlarda OTA güncellemelerini desteklemek için cihaz bootloader'ının aşağıdaki ölçütleri karşıladığından emin olun.

Genel ölçütler

  • Bir OTA aracılığıyla güncellenen tüm bölümler, ana sistem başlatılırken (ve kurtarma sırasında güncellenmezken) güncellenebilir olmalıdır.

  • Bootloader, system bölümünü başlatmak için çekirdek komut satırında şu değeri iletir: ro root=/dev/[node] rootwait init=/init.

  • HAL'den markBootSuccessful çağrısı yapmak Android çerçevesinin sorumluluğundadır. Bootloader, bir bölümü hiçbir zaman başarıyla başlatıldı olarak işaretlememelidir.

Başlatma denetimi HAL desteği

Bootloader, hardware/libhardware/include/hardware/boot_control.h içinde tanımlandığı gibi boot_control HAL'yi desteklemelidir. Güncelleyici önyükleme denetimi HAL'sini sorgular, kullanılmayan başlatma yuvasını günceller, HAL'yi kullanarak etkin yuvayı değiştirir ve güncellenmiş işletim sisteminde yeniden başlatılır. Ayrıntılar için HAL başlatma denetimini uygulama bölümünü inceleyin.

Slot desteği

Bootloader, aşağıdakiler de dahil olmak üzere bölümler ve alanlarla ilgili işlevleri desteklemelidir:

  • Bölüm adları, bootloader'daki belirli bir alana ait bölümleri tanımlayan bir son ek içermelidir. Bu tür her bölüm için yes değerine sahip bir has-slot:partition base name değişkeni bulunur. Slotlar, _a, _b, _c vb. son eklerine sahip bölümlere karşılık gelen a, b, c vb. şeklinde alfabetik olarak adlandırılır. Bootloader, işletim sistemine hangi yuvanın komut satırı özelliği (androidboot.slot_suffix) kullanılarak başlatıldığını bildirmelidir. Bu özellik, Android 12 veya sonraki sürümlerle başlayan cihazlar için bootconfig aracılığıyla ayarlanır.

  • slot-retry-count değeri, setActiveBootSlot geri çağırması aracılığıyla başlatma kontrolü HAL'si veya fastboot set_active komutu aracılığıyla pozitif bir değere (genellikle 3) sıfırlanır. Bir yuvanın parçasındaki bir bölümü değiştirirken, bootloader "başarıyla başlatıldı" ifadesini temizler ve alan için yeniden deneme sayısını sıfırlar.

Bootloader, hangi yuvanın yükleneceğini de belirlemelidir. Şekilde örnek bir karar süreci gösterilmektedir.

Bootloader'ı yerleştirme akışı
Şekil 1. Bootloader için slot ayırma akışı
  1. Deneyeceğiniz zaman aralığını belirleyin. slot-unbootable işaretli bir zaman aralığı yüklemeyi denemeyin. Bu yuva, fastboot tarafından döndürülen değerlerle tutarlı olmalıdır ve geçerli yuva olarak adlandırılır.

  2. Mevcut alan slot-successful olarak işaretlenmezse ve slot-retry-count = 0 öğesi varsa geçerli alanı slot-unbootable olarak işaretleyin. Ardından, unbootable ve slot-successful olarak işaretlenmiş farklı bir alan seçin. Bu alan artık seçilen alan olur. Geçerli bir yuva yoksa kurtarma işlemi için başlatın veya kullanıcıya anlamlı bir hata mesajı gösterin.

  3. Uygun boot.img öğesini seçin ve çekirdek komut satırına doğru sistem bölümlendirme yolunu ekleyin.

  4. Çekirdek komut satırı slot_suffix parametresini doldurun.

  5. Başlatma. slot-successful olarak işaretlenmemişse slot-retry-count değerini azaltın.

fastboot yardımcı programı, herhangi bir flash komutu çalıştırılırken hangi bölümün yanıp söneceğini belirler. Örneğin, fastboot flash system system.img komutu çalıştırıldığında önce current-slot değişkeni sorgulanır, ardından sonucu sistemle birleştirir ve yenilenmesi gereken bölümün adını (system_a, system_b vb.) oluşturur.

Mevcut yuvayı fastboot set_active komutunu veya önyükleme kontrolü HAL setActiveBootSlot komutunu kullanarak ayarlarken bootloader, geçerli yuvayı güncellemeli, slot-unbootable ve slot-successful öğelerini temizlemeli ve yeniden deneme sayısını sıfırlamalıdır (slot-unbootable'ı temizlemenin tek yolu budur).

A/B güncellemesi olmayan cihazlar

A/B güncellemeleri kullanmayan cihazlarda OTA güncellemelerini desteklemek için (A/B olmayan cihazlar bölümüne bakın) cihaz bootloader'ının aşağıdaki ölçütleri karşıladığından emin olun.

  • recovery bölümü, desteklenen bazı bölümden (cache, userdata) sistem görüntüsünü okuyabilen ve bunu system bölümüne yazabilen bir görüntü içermelidir.

  • Bootloader, doğrudan kurtarma modunda başlatmayı desteklemelidir.

  • Radyo görüntüsü güncellemeleri destekleniyorsa recovery bölümü de radyoyu yanıp söndürebilir. Bu, şu iki yöntemden biriyle gerçekleştirilebilir:

    • Bootloader, radyoyu yanıp söndürür. Bu durumda, güncellemeyi tamamlamak için kurtarma bölümünden yeniden bootloader'a geri yüklemek mümkün olmalıdır.

    • Kurtarma görüntüsü radyoda yanıp söner.Bu işlev, ikili program kitaplığı veya yardımcı program olarak sağlanabilir.