Kurtarma Görüntüleri

A/B olmayan cihazlarda kurtarma görüntüsü, bir cihaz ağacı bloğundan (DTB) veya Gelişmiş Yapılandırma ve Güç Arayüzü (ACPI) kaplama görüntüsünden bilgi içermelidir. Bu tür cihazlar kurtarma işleminde önyüklendiğinde, önyükleyici kurtarma görüntüsüyle uyumlu kaplama görüntüsünü yükleyebilir. A/B (kesintisiz) güncellemelerini destekleyen aygıtlar, ayrı bir kurtarma bölümü yerine önyükleme olarak kurtarmayı kullanmalıdır (ayrıntılar için bkz. A/B Güncellemelerini Uygulama ).

Önyükleme/kurtarma görüntüsünün bir parçası olarak bir kurtarma DTBO/ACPIO ekleme seçenekleri Android sürümleri arasında farklılık gösterir.

Serbest bırakmak Güncelleme şeması GKI uyumluluğu Önyükleme başlığı sürümü (başlatma aygıtları) Önyükleme başlığı sürümü (cihazları yükseltme) Özel kurtarma görüntüsü gerekli
11 A/B,
Sanal A/B
Evet 3 * Yok Numara
A/B,
Sanal A/B
Numara 2, 3 0, 1, 2, 3 Numara
A/B olmayan Evet 3 Yok Evet
A/B olmayan Numara 2, 3 0, 1, 2, 3 Evet
10 (S) A/B Yok 2 0, 1, 2 Numara
A/B olmayan Yok 2 0, 1, 2 Evet
9 (P) A/B Yok 1 0, 1 Numara
A/B olmayan Yok 1 0, 1 Evet
8 (O) A/B Yok Yok (0 olarak kabul edilir) Yok (0 olarak kabul edilir) Numara
A/B olmayan Yok Yok (0 olarak kabul edilir) Yok (0 olarak kabul edilir) Evet

* Android 11 veya sonraki sürümleri çalıştıran ve Genel Çekirdek Görüntüsü (GKI) kullanan A/B cihazlarının, satıcı önyükleme bölümüyle uyumlu olması için birincil önyükleme üstbilgisi sürümünün 3 olması gerekir.

Anahtar noktaları:

  • A/B güncellemeleri iki grup bölüm ( boot ve dtbo dahil) kullandığından ve güncellemeler sırasında bunlar arasında geçiş yaparak kurtarma görüntüsü ihtiyacını ortadan kaldırdığından, A/B cihazlarının bir kurtarma görüntüsü belirtmesi gerekmez. İstenirse, A/B cihazları yine de özel bir kurtarma görüntüsü kullanabilir.

  • Android 11 veya sonraki sürümlerle başlatılan ve 3'lük bir önyükleme üstbilgisi sürümü kullanan A/B olmayan cihazlar, kurtarma görüntüsü için ayrı olarak bir önyükleme üstbilgisi sürümü 2 belirtmelidir. Örneğin:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Aygıt ağaçlarını desteklemeyen mimariler için kurtarma görüntüsü, bir DTBO görüntüsü yerine bir ACPIO görüntüsü içerebilir.

OTA hataları ve kurtarma görüntüleri hakkında

A/B olmayan cihazlarda kablosuz (OTA) arızalarını önlemek için kurtarma görüntüsü kendi kendine yeterli ve diğer görüntülerden bağımsız olmalıdır. OTA güncellemesi sırasında, bindirme görüntüsü güncellendikten sonra (ancak tam güncelleme tamamlanmadan önce) bir sorun oluşursa, cihaz OTA güncellemesini tamamlamak için kurtarma moduna geçmeye çalışır. Ancak, bindirme bölümü zaten güncellendiğinden, kurtarma görüntüsüyle (henüz güncellenmemiş) bir uyumsuzluk meydana gelebilir.

Bir güncelleme sırasında kurtarma işleminin DTBO/ACPIO bölümüne bağlı olmasını önlemek için, Android 9 veya sonraki sürümleri çalıştıran A/B olmayan cihazlar, önyükleme görüntüsü biçiminde ayrı bir bölüm olarak kaplama görüntüsünden bilgi içeren bir kurtarma DTBO/ACPIO görüntüsünü belirtebilir ( 1 veya 2'nin önyükleme başlığı sürümünü kullanmalıdır).

Önyükleme görüntüsü değişiklikleri

Android 9 veya sonraki sürümlerini çalıştıran A/B olmayan cihazlarda kurtarma görüntüsünün kurtarma DTBO veya ACPIO'sunu içermesine izin vermek için, önyükleme görüntüsü yapısını aşağıdaki gibi güncelleyin.

Önyükleme görüntüsü bölümü Sayfa sayısı
Önyükleme başlığı (1 sayfa) 1
Çekirdek (l sayfaları) l = ( kernel_size + page_size - 1) / page_size
Ramdisk (m sayfa) m = ( ramdisk_size + page_size - 1) / page_size
İkinci aşama önyükleyici (n sayfa) n = ( second_size + page_size - 1) / page_size
Kurtarma DTBO veya ACPIO (o sayfalar) o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size

Önyükleme görüntüsü başlık sürümünü ve bindirme görüntü yollarını belirtmek için mkbootimg aracı argümanları hakkında ayrıntılar için, bkz. Önyükleme Görüntüsü Üstbilgisi Sürüm Oluşturma .

DTBO'yu uygulama

9 veya daha yüksek sürüm çalıştıran A/B olmayan cihazlar, kurtarma görüntüsünün recovery_dtbo bölümünü doldurabilir. recovery_dtbo görüntüsünü recovery.img dosyasına, BoardConfig.mk cihazına dahil etmek için:

  • BOARD_INCLUDE_RECOVERY_DTBO yapılandırmasını true olarak ayarlayın:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Önyükleme görüntüsü başlık sürümünü belirtmek için BOARD_MKBOOTIMG_ARGS değişkenini genişletin:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • BOARD_PREBUILT_DTBOIMAGE değişkeninin DTBO görüntüsünün yoluna ayarlandığından emin olun. Android derleme sistemi, kurtarma görüntüsünün oluşturulması sırasında mkbootimg aracının recovery_dtbo argümanını ayarlamak için değişkeni kullanır.

BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS ve BOARD_PREBUILT_DTBOIMAGE değişkenleri doğru ayarlanmışsa, Android derleme sistemi, recovery.img içindeki BOARD_PREBUILT_DTBOIMAGE değişkeni tarafından belirtilen DTBO'yu içerir.

ACPIO'yu uygulama

Android 9 veya sonraki sürümlerini çalıştıran A/B olmayan cihazlar, bir ACPIO kaplama görüntüsü kullanabilir (DTBO görüntüsü yerine) ve kurtarma görüntüsünün recovery_acpio bölümünü ( recovery_dtbo bölümü yerine) doldurabilir. recovery_acpio görüntüsünü recovery.img dosyasına, BoardConfig.mk cihazına dahil etmek için:

  • BOARD_INCLUDE_RECOVERY_ACPIO yapılandırmasını true olarak ayarlayın:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Önyükleme görüntüsü başlık sürümünü belirtmek için BOARD_MKBOOTIMG_ARGS değişkenini genişletin. ACPIO kurtarmayı desteklemek için değişken 1'den büyük veya 1'e eşit olmalıdır.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • BOARD_RECOVERY_ACPIO değişkeninin ACPIO görüntüsünün yoluna ayarlandığından emin olun. Android derleme sistemi, kurtarma görüntüsünün oluşturulması sırasında mkbootimg aracının recovery_acpio bağımsız değişkenini ayarlamak için değişkeni kullanır.

BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS ve BOARD_RECOVERY_ACPIO değişkenleri doğru ayarlanmışsa, Android derleme sistemi, recovery.img içindeki BOARD_RECOVERY_ACPIO değişkeni tarafından belirtilen ACPIO'yu içerir.