OTA güncellemelerini uygulayın

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

Kurtarma ve önyükleyici tarafından iletişim için kullanılan flash'taki bir bloğun içeriği hakkında ayrıntılı bilgi için bootable/recovery/bootloader_message/bootloader_message.h dosyasını inceleyin.

A/B güncellemeleri olan cihazlar

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

Genel ölçütler

  • OTA üzerinden güncellenen tüm bölümler, ana sistem başlatılırken güncellenebilir olmalıdır (ve kurtarma modunda güncellenmez).

  • Önyükleme yükleyici, system bölümünü başlatmak için çekirdek komut satırına aşağıdaki değeri iletir: ro root=/dev/[node] rootwait init=/init.

  • HAL'den markBootSuccessful çağırmak Android çerçevesinin sorumluluğundadır. Önyükleme yükleyici, bir bölümü hiçbir zaman başarıyla önyüklendi 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ılı bilgi için Başlatma denetimi HAL'ini uygulama başlıklı makaleyi inceleyin.

Slot desteği

Önyükleyici, aşağıdakiler dahil olmak üzere bölümler ve yuvalarla ilgili işlevleri desteklemelidir:

  • Bölme adları, önyükleyicideki belirli bir yuvaya ait olan bölümleri tanımlayan bir son ek içermelidir. Bu tür her bölüm için, değeri yes olan has-slot:partition base name adlı bir değişken vardır. Yuvalar, _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. Önyükleme yükleyici, androidboot.slot_suffix komut satırı mülkünü kullanarak işletim sistemini hangi yuvanın başlatıldığını bilgilendirmelidir. Bu mülk, Android 12 veya sonraki sürümlerle başlatılan cihazlar için bootconfig aracılığıyla ayarlanır.

  • slot-retry-count değeri, setActiveBootSlot geri çağırma işlevi aracılığıyla veya fastboot set_active komutu aracılığıyla önyükleme kontrolü HAL tarafından pozitif bir değere (genellikle 3) sıfırlanır. Bir yuvanın parçası olan bir bölüm değiştirilirken önyükleme yükleyici, "başarıyla başlatıldı" ifadesini temizler ve yuvanın 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 slotting flow
Şekil 1. Önyükleyici slotting akışı
  1. Hangi yuvayı deneyeceğinizi belirleyin. slot-unbootable işaretli bir yuvayı yüklemeye çalışmayın. 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 slot slot-successful olarak işaretlenmemişse ve slot-retry-count = 0 varsa mevcut slotu 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şlemini başlatın veya kullanıcıya anlamlı bir hata mesajı gösterin.

  3. Uygun boot.img seçin ve çekirdek komut satırına doğru sistem bölümünün 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ştirilerek önyüklemesi yapılacak bölümün adı (system_a, system_b vb.) oluşturulur.

fastboot set_active komutu veya boot control HAL setActiveBootSlot komutu kullanılarak mevcut yuva ayarlanırken önyükleme yükleyici, mevcut yuvanın güncellenmesini, slot-unbootable ve slot-successful değerlerinin temizlenmesini ve yeniden deneme sayısının sıfırlanmasını sağlamalıdır (slot-unbootable değerinin temizlenmesinin tek yolu budur).

A/B güncellemeleri 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 bir bölümden (cache, userdata) sistem görüntüsünü okuyup system bölümüne yazabildiği bir görüntü içermelidir.

  • Önyükleyici, doğrudan kurtarma moduna önyüklemeyi desteklemelidir.

  • Radyo resim güncellemeleri destekliyorsa recovery bölümü de radyoyu flaşlayabilir. Bu işlem iki şekilde yapılabilir:

    • Önyükleyici, radyoyu yanıp söner. 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ü radyoyu yanıp söner. Bu işlev, ikili kitaplık veya yardımcı program olarak sağlanabilir.