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
olanhas-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 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ş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.

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.Mevcut slot
slot-successful
olarak işaretlenmemişse veslot-retry-count = 0
varsa mevcut slotuslot-unbootable
olarak işaretleyin. Ardından,unbootable
işaretli olmayan veslot-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.Uygun
boot.img
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.Başlatma.
slot-successful
işaretli değilseslot-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ü okuyupsystem
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.