Kablosuz (OTA) güncellemeleri uygulamak için bootloader'ın, başlatma sırasında bir kurtarma RAM diskine erişebilmesi gerekir. Cihaz, değiştirilmemiş 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ünde yüklenir. Bu yöntem, bekleyen tüm kurtarma çalışmalarını (örneğin, OTA uygulama veya verileri kaldırma) tamamlama işlemine devam edilmesini sağlar.
Kurtarma işlemi ve bootloader için kullanılan Flash'taki bir bloğun içeriği hakkında ayrıntılar için bootable/recovery/bootloader_message/bootloader_message.h sayfasına bakın.
A/B güncellemesi olan cihazlar
A/B güncellemelerini kullanan cihazlarda OTA güncellemelerini desteklemek için cihaz bootloader'ının aşağıdaki ölçütleri karşıladığından emin olun.
Genel ölçütler
Bir OTA aracılığıyla güncellenen tüm bölümler, ana sistem başlatılırken (ve kurtarma sırasında güncellenmezken) güncellenebilir olmalıdır.
Bootloader,
system
bölümünü başlatmak için çekirdek komut satırında şu değeri iletir:ro root=/dev/[node] rootwait init=/init
.HAL'den
markBootSuccessful
çağrısı yapmak Android çerçevesinin sorumluluğundadır. Bootloader, bir bölümü hiçbir zaman başarıyla başlatıldı 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ılar için HAL başlatma denetimini uygulama bölümünü inceleyin.
Slot desteği
Bootloader, aşağıdakiler de dahil olmak üzere bölümler ve alanlarla ilgili işlevleri desteklemelidir:
Bölüm adları, bootloader'daki belirli bir alana ait bölümleri tanımlayan bir son ek içermelidir. Bu tür her bölüm için
yes
değerine sahip birhas-slot:partition base name
değişkeni bulunur. Slotlar,_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. Bootloader, işletim sistemine hangi yuvanın komut satırı özelliği (androidboot.slot_suffix
) kullanılarak başlatıldığını bildirmelidir. Bu özellik, Android 12 veya sonraki sürümlerle başlayan cihazlar için bootconfig aracılığıyla ayarlanır.slot-retry-count
değeri,setActiveBootSlot
geri çağırması aracılığıyla başlatma kontrolü HAL'si veyafastboot set_active
komutu aracılığıyla pozitif bir değere (genellikle3
) sıfırlanır. Bir yuvanın parçasındaki bir bölümü değiştirirken, bootloader "başarıyla başlatıldı" ifadesini temizler ve alan için 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'ı yerleştirme akışı](https://source.android.com/static/docs/core/architecture/bootloader/images/bootloader_slotting.png?hl=tr)
Deneyeceğiniz zaman aralığını belirleyin.
slot-unbootable
işaretli bir zaman aralığı yüklemeyi denemeyin. 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 alan
slot-successful
olarak işaretlenmezse veslot-retry-count = 0
öğesi varsa geçerli alanıslot-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şlemi için başlatın veya kullanıcıya anlamlı bir hata mesajı gösterin.Uygun
boot.img
öğesini seçin ve çekirdek komut satırına doğru sistem bölümlendirme 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ştirir ve yenilenmesi gereken bölümün adını (system_a
, system_b
vb.) oluşturur.
Mevcut yuvayı fastboot set_active
komutunu veya önyükleme kontrolü HAL setActiveBootSlot
komutunu kullanarak ayarlarken bootloader, geçerli yuvayı güncellemeli, slot-unbootable
ve slot-successful
öğelerini temizlemeli ve yeniden deneme sayısını sıfırlamalıdır (slot-unbootable
'ı temizlemenin tek yolu budur).
A/B güncellemesi 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 bazı bölümden (cache
,userdata
) sistem görüntüsünü okuyabilen ve bunusystem
bölümüne yazabilen bir görüntü içermelidir.Bootloader, doğrudan kurtarma modunda başlatmayı desteklemelidir.
Radyo görüntüsü güncellemeleri destekleniyorsa
recovery
bölümü de radyoyu yanıp söndürebilir. Bu, şu iki yöntemden biriyle gerçekleştirilebilir:Bootloader, radyoyu yanıp söndürür. 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ü radyoda yanıp söner.Bu işlev, ikili program kitaplığı veya yardımcı program olarak sağlanabilir.