OTA güncellemelerini uygulayın

Kablosuz (OTA) güncellemelerin uygulanması için önyükleyicinin, önyükleme sırasında bir kurtarma RAM diskine erişebilmesi gerekir. Cihaz, değiştirilmemiş bir 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ünü 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.

Açılış kontrolü HAL'i desteği

Bootloader, hardware/libhardware/include/hardware/boot_control.h'te tanımlandığı şekilde boot_control HAL'i desteklemelidir. Güncelleyici, boot control HAL'i sorgular, kullanılmayan önyükleme yuvasını günceller, HAL'i kullanarak etkin yuvanın yerini değiştirir ve güncellenmiş işletim sisteminde yeniden başlatır. Ayrıntılı bilgi için Başlatma denetimi HAL'ini uygulama başlıklı makaleyi inceleyin.

Yuva 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 bulunur. 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 mevcut 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 işaretli olmayan ve slot-successful olarak işaretlenmiş farklı bir yuva seçin. Bu yuva artık seçili yuvadır. Mevcut bir yuva yoksa kurtarma moduna önyükleme yapı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 işaretli değilse slot-retry-count değerini azaltın.

fastboot yardımcı programı, herhangi bir flaş komutu çalıştırıldığında hangi bölümün flaşlanacağını 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üklenmesi gereken 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 güncellemesi olmayan güncellenebilir cihazlar bölümüne bakın) cihazın önyükleyicisinin 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 yazabilen bir görüntü içermelidir.

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

  • Radyo resim güncellemeleri destekleniyorsa 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 bootloader'a yeniden önyükleme yapabilirsiniz.

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