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
olanhas-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 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 geçerli 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
veslot-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.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
olarak işaretlenmemişseslot-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ü okuyupsystem
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.