OTA Güncellemelerini Destekleme

Kablosuz (OTA) güncellemeleri desteklemek 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, önyükleyici misc bölümdeki ilk 32 baytı okur; Buradaki veriler boot-recovery ile eşleşiyorsa, önyükleyici recovery görüntüsüne önyükleme yapar. Bu yöntem, bekleyen kurtarma çalışmalarının (örneğin, OTA uygulanması veya verilerin kaldırılması) tamamlanmaya devam etmesini sağlar.

Recovery ve bootloader tarafından iletişim için kullanılan flash'taki bir bloğun içeriğine ilişkin ayrıntılar için bootable/recovery/bootloader_message/bootloader_message.h adresine bakın.

A/B güncellemeleri olan cihazlar

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

Genel kriterler

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

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

  • HAL'den markBootSuccessful çağırmak Android çerçevesinin sorumluluğundadır. Önyükleyici asla bir bölümü başarıyla başlatıldı olarak işaretlememelidir.

Önyükleme kontrolü HAL desteği

Önyükleyicinin hardware/libhardware/include/hardware/boot_control.h dosyasında tanımlandığı şekilde boot_control HAL'yi desteklemesi gerekir. Güncelleyici, HAL önyükleme kontrolünü sorgular, o anda kullanılmayan önyükleme yuvasını günceller, HAL'yi kullanarak etkin yuvayı değiştirir ve güncellenmiş işletim sistemini yeniden başlatır. Ayrıntılar için bkz. HAL önyükleme denetimini uygulama .

Slot desteği

Önyükleyicinin aşağıdakiler de dahil olmak üzere bölümler ve yuvalarla ilgili işlevleri desteklemesi gerekir:

  • Bölüm adları, hangi bölümlerin önyükleyicideki belirli bir yuvaya ait olduğunu tanımlayan bir sonek içermelidir. Bu tür her bölüm için, yes değerine sahip karşılık gelen bir has-slot: partition base name vardır. Yuvalar, _a , _b , _c vb. son ekine sahip bölümlere karşılık gelen a, b, c vb. şeklinde alfabetik olarak adlandırılır. Önyükleyici, androidboot.slot_suffix komut satırı özelliğini kullanarak işletim sistemine hangi yuvanın önyüklendiğini bildirmelidir. Bu özellik, 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ğrısı yoluyla 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ştirirken, önyükleyici "başarıyla başlatıldı" durumunu temizler ve yuva için yeniden deneme sayısını sıfırlar.

Önyükleyici ayrıca hangi yuvanın yükleneceğini de belirlemelidir. Şekilde örnek bir karar süreci gösterilmektedir.

Önyükleyici yerleştirme akışı
Şekil 1. Önyükleyici yerleştirme akışı
  1. Hangi slotu deneyeceğinizi belirleyin. slot-unbootable olarak işaretlenmiş 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 anılır.

  2. Geçerli yuva slot-successful olarak işaretlenmemişse ve slot-retry-count = 0 sahipse, geçerli yuvayı slot-unbootable olarak işaretleyin. Ardından, unbootable işaretlenmemiş ve slot-successful olarak işaretlenmiş farklı bir yuva seçin; bu yuva artık seçilen yuvadır. Geçerli bir yuva yoksa, kurtarma işlemine ön yükleme yapın veya kullanıcıya anlamlı bir hata mesajı görüntüleyin.

  3. Uygun boot.img dosyasını 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. Bot. slot-successful işaretlenmemişse, slot-retry-count değerini azaltın.

fastboot yardımcı programı, herhangi bir flash komutunu çalıştırırken hangi bölümün flashlanacağını belirler. Örneğin, fastboot flash system system.img komutunu çalıştırmak, önce current-slot değişkenini sorgular, ardından flaşlanması gereken bölümün adını ( system_a , system_b , vb.) oluşturmak için sonucu sistemle birleştirir.

fastboot set_active komutunu veya önyükleme kontrolü HAL setActiveBootSlot komutunu kullanarak geçerli yuvayı ayarlarken, önyükleyicinin geçerli yuvayı güncellemesi, slot-unbootable ve slot-successful temizlemesi ve yeniden deneme sayısını sıfırlaması gerekir ( slot-unbootable -unbootable'ı temizlemenin tek yolu budur) slot-unbootable ).

A/B güncellemesi olmayan cihazlar

A/B güncellemelerini kullanmayan cihazlarda OTA güncellemelerini desteklemek için (bkz . A/B olmayan güncellenebilir cihazlar ), cihaz önyükleyicisinin aşağıdaki kriterleri karşıladığından emin olun.

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

  • Önyükleyici, doğrudan kurtarma moduna yeniden başlamayı desteklemelidir.

  • Radyo görüntüsü güncellemeleri destekleniyorsa recovery bölümünün de radyoyu flaş edebilmesi gerekir. Bu iki yoldan biriyle gerçekleştirilebilir:

    • Önyükleyici radyoyu yakıp söndürür. Bu durumda, güncellemeyi tamamlamak için kurtarma bölümünden önyükleyiciye yeniden önyükleme yapmak mümkün olmalıdır.

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