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 birhas-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 veyafastboot set_active
komutu aracılığıyla önyükleme kontrolü HAL tarafından pozitif bir değere (genellikle3
) 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.
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.Geçerli yuva
slot-successful
olarak işaretlenmemişse veslot-retry-count = 0
sahipse, geçerli yuvayıslot-unbootable
olarak işaretleyin. Ardından,unbootable
işaretlenmemiş veslot-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.Uygun
boot.img
dosyasını seçin ve çekirdek komut satırına doğru sistem bölümünün yolunu ekleyin.Çekirdek komut satırı
slot_suffix
parametresini doldurun.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 bunusystem
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.