Genel başlatma bölümü

Android 12'de, genel boot görüntüsü Genel Kernel Görüntüsü (GKI), genel ramdisk ve GKI çekirdeğini içerir.

Android 13 ile kullanıma sunulan cihazlarda, ramdisk, boot resminden kaldırılıp ayrı bir init_boot içine yerleştirilir görüntüsüdür. Bu değişiklik, boot resmini yalnızca GKI çekirdeği.

Android 12'yi kullanmaya devam eden cihazları yükseltmek için daha eski çekirdek sürümlerinde, genel RAM yeni init_boot resmi gerekmez.

Genel bir ramdisk oluşturmak için tedarikçiye özgü kaynakları ramdisk'in dışına taşıyın Böylece genel ramdisk yalnızca ilk aşama init ve bir özellik içerir zaman damgası bilgilerini içeren dosyadır.

Şu cihazlarda:

  • Özel bir recovery bölümü kullanmayın, tüm kurtarma bitleri vendor_boot ramdisk'e genel bir ramdisk.

  • Özel bir recovery bölümü kullanın, recovery RAM diskinde değişiklik yapmayın recovery RAM diski bağımsız olduğundan gereklidir.

Mimari

Aşağıdaki şemalarda, Android çalıştıran cihazların mimarisi gösterilmektedir 12 ve üzeri. Android 13 ile kullanıma sunulan cihazlarda yeni bir Genel RAM'i içeren init_boot resim. Android 12'den Android'e geçen cihazlar 13 platformdakilerle aynı mimariyi Android 12.

Android 13 ile kullanıma sunun, özel bir kurtarma işlemi gerekmez

Cihazı başlatma/yükseltme, GKI, özel kurtarma bilgisi yok

Şekil 1. GKI ile kullanıma sunulan veya Android 13'e yükseltilen cihazlar (özel bir kurtarma seçeneği yoktur).

Android 13 ile lansman, özel ve A/B kurtarma (özel ramdisk)

Cihazı başlatma/yükseltme, GKI, özel ve A/B kurtarma

Şekil 2. GKI, özel ve A/B kurtarma işleviyle Android 13'ü kullanıma sunulan veya Android 13'e yükseltilen cihazlar.

Cihazda recovery_a ve recovery_b bölümleri varsa bu resme bakın.

Android 13 ile lansman, özel ve A/B dışı kurtarma (özel ramdisk)

Cihazı başlatma/yükseltme, GKI, özel ve A/B olmayan kurtarma

Şekil 3. GKI, özel ve A/B dışı kurtarma özelliği ile kullanıma sunulan veya Android 13'e yükseltilen cihazlar.

Cihazın recovery adlı bir bölümü varsa ve bu bölüm alan soneki.

Android 12'yi başlatma veya yükseltme (özel bir kurtarma işlemi gerekmez)

Cihazı başlatma/yükseltme, GKI, özel kurtarma bilgisi yok

4.Şekil GKI ile kullanıma sunulan veya Android 12'ye yükseltilen cihazlar (özel bir kurtarma seçeneği yoktur).

Android 12'yi başlatma veya yükseltme, özel ve A/B kurtarma (özel ramdisk)

Cihazı başlatma/yükseltme, GKI, özel ve A/B kurtarma

5. Şekil. GKI, özel ve A/B kurtarma işleviyle Android 12'ye yükseltilen veya yükseltilen cihazlar.

Cihazda recovery_a ve recovery_b bölümleri varsa bu resme bakın.

Android 12'yi başlatma veya yükseltme (özel ve A/B olmayan kurtarma işlemi) (özel ramdisk)

Cihazı başlatma/yükseltme, GKI, özel ve A/B olmayan kurtarma

6. Şekil. GKI, özel ve A/B dışı kurtarma özelliği ile kullanıma sunulan veya Android 12'ye yükseltilen cihazlar.

Cihazın recovery adlı bir bölümü varsa ve bu bölüm alan soneki.

Android 12'ye yükseltme, önyükleme olarak kurtarma (ramdisk olarak kurtarma)

Cihazı başlatma/yükseltme, GKI yok, başlatma sırasında kurtarma

7.Şekil Android 12'ye yükseltilen (GKI olmayan, başlatma olarak kurtarma) cihazlar.

Android 12'ye yükseltme, özel kurtarma (özel ramdisk)

Cihazı başlatma/yükseltme, GKI yok, özel kurtarma

8. Şekil. Android 12'ye yükseltilen (GKI olmayan, özel kurtarma) cihazlar.

Başlatma görüntüsü içerikleri

Android başlatma görüntüleri şunları içerir.

  • Android 13 ile kullanıma sunulacak cihazlar için init_boot resim eklendi

    • Başlık sürümü V4
    • Genel ramdisk resmi
  • Genel boot resim

    • Başlık sürümü V3 veya Sürüm 4
      • GKI boot.img sertifikası için boot_signature (yalnızca sürüm 4). İlgili içeriği oluşturmak için kullanılan sertifikalı GKI boot.img, doğrulanmış başlatma için imzalanmamış. OEM'ler bunu yapmaya Önceden oluşturulmuş boot.img öğesini cihaza özel bir cihazla imzalayın AVB tuşuna basın.
      • Genel cmdline (GENERIC_KERNEL_CMDLINE)
      • GKI çekirdeği
    • Genel ramdisk resmi
      • Yalnızca Android 12'deki boot resme dahil ve öncesi
  • vendor_boot görüntüsü (ayrıntılar için Tedarikçi Firma Başlatma'ya bakın) Bölümler)

    • vendor_boot üst bilgisi
      • Cihaza özel cmdline (BOARD_KERNEL_CMDLINE)
    • vendor_boot ramdisk resmi
      • lib/modules
      • Kurtarma kaynakları (özel kurtarma yoksa)
    • dtb resmi
  • recovery resmi

    • Başlık sürümü V2
      • Gerekirse kurtarma için cihaza özel cmdline
      • A/B olmayan kurtarma bölümü için üstbilginin içeriği bağımsız; bkz. Kurtarma Görüntüleri. Örnek:
      • cmdline, boot ve vendor_boot cmdline ile birleştirilmemiş.
      • Başlıkta, gerekirse kurtarma DTBO'su belirtilir.
      • A/B kurtarma bölümü için içerikler birleştirilebilir veya tahmin edilebilir boot ve vendor_boot. Örnek:
      • cmdline, boot ve vendor_boot cmdline ile ilişkilendirildi.
      • DTBO, vendor_boot başlığından anlaşılabilir.
    • recovery ramdisk resmi
      • Kurtarma kaynakları
      • A/B olmayan kurtarma bölümü için RAM disk içeriği aşağıdaki gibi olmalıdır: bağımsız; bkz. Kurtarma Görüntüleri. Örnek:
      • lib/modules, başlatma için gereken tüm çekirdek modüllerini içermelidir kurtarma modu
      • Kurtarma RAM'i init içermelidir.
      • A/B kurtarma bölümü için kurtarma RAM diski, genel ve vendor_boot ramdisk olduğundan bağımsız olarak yürütülür. Örnek:
      • lib/modules, yalnızca şunun için gereken ek çekirdek modüllerini içerebilir: vendor_boot RAM diskindeki çekirdek modüllerinin yanı sıra başlatma kurtarma modu.
      • /init konumundaki sembolik bağlantı mevcut olabilir, ancak başlatma görüntüsündeki ilk aşama /init ikili programı.

Genel ramdisk resim içerikleri

Genel ramdisk aşağıdaki bileşenleri içerir.

  • init
  • system/etc/ramdisk/build.prop
  • ro.PRODUCT.bootimg.* build eşyalar
  • Ekleme noktaları için boş dizinler: debug_ramdisk/, mnt/, dev/, sys/, proc/ metadata/
  • first_stage_ramdisk/
    • Ekleme noktaları için kopyalanan boş dizinler: debug_ramdisk/, mnt/, dev/, sys/, proc/, metadata/

Başlatma görüntüsü entegrasyonu

Derleme işaretleri; init_boot, boot, recovery ve vendor_boot özelliklerini kontrol eder nasıl oluşturulduğunu göstereceğim. Boole pano değişkeninin değeri dize olmalıdır true veya boş (varsayılan) olmalıdır.

  • TARGET_NO_KERNEL Bu değişken, derlemenin önceden oluşturulmuş bir başlatma kullanıp kullanmadığını gösterir görüntüsüdür. Bu değişken true olarak ayarlanırsa BOARD_PREBUILT_BOOTIMAGE değerini ayarlayın konumuna göre (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img)

  • BOARD_USES_RECOVERY_AS_BOOT Bu değişken, cihazın recovery resmi, boot resmi olarak kullanılır. GKI kullanılırken bu değişken boş olmalı ve kurtarma kaynakları vendor_boot hedefine taşınmalıdır.

  • BOARD_USES_GENERIC_KERNEL_IMAGE Bu değişken, yönetim kurulunun GKI. Bu değişken sysprops veya PRODUCT_PACKAGES

    Bu, Jamboard düzeyinde GKI anahtarıdır; aşağıdaki değişkenlerin tümü bu değişken tarafından kısıtlanır.

  • BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT Bu değişken, ramdisk kurtarma kaynakları vendor_boot için oluşturulmuştur.

    • true olarak ayarlandığında kurtarma kaynakları yalnızca vendor-ramdisk/ olarak oluşturulur recovery/root/ için tasarlanmamıştır.

    • Boş olduğunda kurtarma kaynakları yalnızca recovery/root/ için oluşturulur ve değildir vendor-ramdisk/ için tasarlandı.

  • BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT Bu değişken, GSI'nın AVB anahtarları vendor_boot kalitesine göre tasarlanmıştır.

    • BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT ise true olarak ayarlandığında:

      • Ayarlandığında, GSI AVB anahtarları şu şekilde tasarlanmıştır: $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb

      • Ayarlanmazsa GSI AVB anahtarları şuna benzer şekilde tasarlanmıştır: $ANDROID_PRODUCT_OUT/vendor-ramdisk/avb

    • Boş olduğunda, BOARD_RECOVERY_AS_ROOT ise:

      • Ayarlandığında, GSI AVB anahtarları şu şekilde tasarlanmıştır: $ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb

      • Ayarlanmazsa GSI AVB anahtarları şuna benzer şekilde tasarlanmıştır: $ANDROID_PRODUCT_OUT/ramdisk/avb

  • BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE Bu değişken, recovery görüntüsü, çekirdek içeriyor veya içermiyor. Android ile kullanıma sunulan cihazlar 12 ve A/B recovery bölümü kullanıldığında bu ayar seçilmelidir değişkenini true olarak ayarlayın. Android 12 ile kullanıma sunulan cihazlar A/B dışını kullanmak, kurtarma görüntüsünü korumak için bu değişkeni false olarak ayarlamalıdır. bağımsız olması gerekir.

  • BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES Bu değişken, $OUT/boot*.img, hedef dosyalar altındaki IMAGES/ klasörüne kopyalanır.

    • aosp_arm64 bu değişkeni true olarak ayarlamalıdır.

    • Diğer cihazlar bu değişkeni boş bırakmalıdır.

  • BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE Bu değişken, init_boot.img oluşturulur ve boyutu ayarlar. Ayarlandığında, genel RAM parametresi, boot.img yerine init_boot.img öğesine eklenir ve Şunun için BOARD_AVB_INIT_BOOT* değişken belirlenecek: chained vbmeta.

İzin verilen kombinasyonlar

Bileşen veya değişken Kurtarma bölümü olmadan cihazı yeni sürüme geçirin Kurtarma bölümüyle cihazı yeni sürüme geçir Cihazı, kurtarma bölümü olmadan başlat Cihazı A/B kurtarma bölümüyle başlat Cihazı A/B olmayan kurtarma bölümüyle başlatın aosp_arm64
boot içerir evet evet evet evet evet evet
init_boot içerir (Android 13) hayır hayır evet evet evet evet
vendor_boot içerir isteğe bağlı isteğe bağlı evet evet evet hayır
recovery içerir hayır evet hayır evet evet hayır
BOARD_USES_RECOVERY_AS_BOOT true boş boş boş boş boş
BOARD_USES_GENERIC_KERNEL_IMAGE boş boş true true true true
PRODUCT_BUILD_RECOVERY_IMAGE boş true veya boş boş true veya boş true veya boş boş
BOARD_RECOVERYIMAGE_PARTITION_SIZE boş > 0 boş > 0 > 0 boş
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT boş boş true boş boş boş
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT boş boş true true true boş
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE boş boş boş true boş boş
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES boş boş boş boş boş true

Özel bir recovery bölümü olan cihazlar ayarlanabilir PRODUCT_BUILD_RECOVERY_IMAGE - true veya boş. Bu cihazlarda BOARD_RECOVERYIMAGE_PARTITION_SIZE ayarlandı ve recovery görüntüsü oluşturuldu.

Başlatma için zincirli vbmeta'yi etkinleştir

boot ve init_boot görüntüleri için zincirli ddt meta desteği etkinleştirilmelidir. Belirtin: şu:

BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
BOARD_AVB_BOOT_ALGORITHM := SHA256_RSA4096
BOARD_AVB_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION := 2

BOARD_AVB_INIT_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem
BOARD_AVB_INIT_BOOT_ALGORITHM := SHA256_RSA2048
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
BOARD_AVB_INIT_BOOT_ROLLBACK_INDEX_LOCATION := 3

Örneğin, bkz. değiştirin.

Kök olarak sistem

GKI kullanan cihazlarda kök olarak sistem desteklenmez. Şu tarihte: bu tür cihazlarda BOARD_BUILD_SYSTEM_ROOT_IMAGE boş olmalıdır. Kök olarak sistem ve dinamik bölümlendirme kullanan cihazlar için de desteklenmemektedir.

Ürün yapılandırmaları

Genel RAM'i kullanan cihazlar, diske yüklenmesine izin verilmez. Bunu yapmak için device.mk:

$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)

generic_ramdisk.mk dosyası, diğer oluşturma dosyalarının yanlışlıkla gönderilmesini de önler RAM'e başka dosyalar yükleyerek (bu tür dosyaları vendor_ramdisk ).

Cihazları ayarla

Kurulum talimatları, Android'le başlatılan cihazlar arasında farklılık gösterir 13, Android 12'ye yükseltme ve Android 12 ile kullanıma sunma. Android 13'teki ayarlar, Android 12'dekine benzer şekilde tasarlanmıştır.

  • Android 12'ye Geçirilen Cihazlar:

    • BOARD_USES_RECOVERY_AS_BOOT değeri korunabilir. Bunu yaparlarsa eski yapılandırmaları kullandıklarını ve yeni derleme değişkenlerinin boş bırakılması gerektiğini unutmayın. Böyle bir durumda cihazlar:

      • BOARD_USES_RECOVERY_AS_BOOT değerini true olarak ayarlayın. Mimari şu şekildedir: Şekil 3'te gösterilmiştir.

      • BOARD_USES_RECOVERY_AS_BOOT değerini boş olarak ayarlayın. Mimari gösterildiği gibidir. Şekil 4.

    • BOARD_USES_RECOVERY_AS_BOOT alanı boş olarak ayarlanabilir. Bunu yaparlarsa yeni yapılandırmalar var. Bu tür cihazlar:

  • Android 12 ile kullanıma sunulan cihazlar ayarlanmalıdır Boşaltmak ve yeni yapılandırmaları kullanmak için BOARD_USES_RECOVERY_AS_BOOT. Böyle bir durumda cihazlar:

aosp_arm64 yalnızca GKI oluşturduğundan (vendor_boot veya kurtarma işlemini değil), tam bir hedef değildir. aosp_arm64Derleme yapılandırmaları için generic_arm64.

1. Seçenek: Özel kurtarma bölümü yok

recovery bölümü olmayan cihazlar,boot boot bölüm. vendor_boot RAM'i tüm kurtarma kaynaklarını içerir, lib/modules (tedarikçi çekirdek modülleriyle) dahil. Bu tür cihazlarda ürün yapılandırması şu kaynaktan devralır: generic_ramdisk.mk.

BOARD (BOARD) değerlerini ayarlayın

Aşağıdaki değerleri ayarlayın:

BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT := true
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true

vendor_boot RAM'i, /init ile /system/bin/init arasında sembolik bağlantı içerebilir. ve /system/bin/init itibarıyla init_second_stage.recovery. Ancak, genel ramdisk, vendor_boot ramdisk'inden sonra birleştirilir, /init sembolik bağlantının üzerine yazılır. Cihaz, kurtarma işlemini başlattığında İkinci aşamanın başlatılmasını desteklemek için /system/bin/init ikili programı gerekiyor. İçindekiler vendor_boot + genel RAM'ler aşağıdaki gibidir:

  • /init (genel ramdisk'ten, init_first_stage sitesinden oluşturuldu)
  • /system/bin/init (vendor_ramdisk tutarından, şuradan geliştirildi: init_second_stage.recovery)

Fstab dosyalarını taşıma

Genel RAM'e yüklenen fstab dosyalarını şu klasöre taşıyın: vendor_ramdisk. Örneğin, bkz. değiştirin.

Modülleri yükleme

vendor_ramdisk ürününe cihaza özel modüller yükleyebilirsiniz (atla yoksa bu adımı etkinleştirmeniz gerekir.

  • Modül yüklendiğinde modülün vendor_ramdisk varyantını kullanın /first_stage_ramdisk. Bu modül init tarihinden sonra kullanılabilir olacaktır kökü /first_stage_ramdisk olarak değiştirir, ancak init kökü /system. Örnekler için Meta veri sağlamaları Sanal A/B sıkıştırması.

  • Modül / ürününe yüklendiğinde modülün recovery varyantını kullanın. Bu modül, init tarafından kök olarak anahtarlamadan önce kullanıma sunulacaktır. /first_stage_ramdisk. Modülleri / ürününe yüklemeyle ilgili ayrıntılar için bkz. Öncelik sahne konsolunuza gidin.

İlk aşama konsolu

İlk aşama konsolu, init kök dizini şuna geçirmeden önce başladığından: /first_stage_ramdisk, modüllerin recovery varyantını yüklemeniz gerekiyor. Varsayılan olarak her iki modül varyantı da şuraya yüklenir: build/make/target/product/base_vendor.mk. Bu durumda, cihaz oluşturma dosyası recovery varyantını açıkça yüklemeniz gerekmez.

Kurtarma modüllerini açıkça yüklemek için aşağıdakileri kullanın.

PRODUCT_PACKAGES += \
    linker.recovery \
    shell_and_utilities_recovery \

Bu sayede linker, sh ve toybox, $ANDROID_PRODUCT_OUT/recovery/root/system/bin, ardından vendor_ramdisk altında /system/bin.

İlk aşama konsolu (ör. adbd) için gereken modülleri eklemek üzere takip ediliyor.

PRODUCT_PACKAGES += adbd.recovery

Bu işlem, belirtilen modüllerin $ANDROID_PRODUCT_OUT/recovery/root/system/bin ve ardından vendor_ramdisk altında /system/bin.

Meta veri sağlamaları

Meta verileri desteklemek için sağlamalar ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır. aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

Örneğin, bkz. değişiklik listesi.

Sanal A/B sıkıştırması

Sanal A/B sıkıştırmasının desteklenmesi için snapuserd, vendor_ramdisk. Cihaz, virtual_ab_ota/compression.mk, (snapuserd) vendor_ramdisk varyantını yükler.

Başlatma işlemindeki değişiklikler

Kurtarma veya Android'i başlatma işlemi şu istisna:

  • build.prop Ramdisk'i /second_stage_resources ile ikinci etapta ilerler init, başlatmanın derleme zaman damgasını okuyabilir.

Kaynaklar genel RAM'den vendor_boot ramdisk'e taşındığı için sonuçta genel ramdisk'in vendor_boot ramdisk'e birleştirildiğinde değişiklik değişmez.

e2fsck'yi kullanılabilir yap

Cihaz oluşturma dosyaları şunlardan devralabilir:

  • Cihaz sanal makineleri destekliyorsa virtual_ab_ota/launch_with_vendor_ramdisk.mk A/B testi yapabilirsiniz.

  • Cihaz sanal A/B'yi destekliyorsa virtual_ab_ota/compression.mk sağlayabilirsiniz.

Ürün oluşturma dosyaları yüklenir $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck Kuyruklu a işareti çalışma zamanından önce, init ilk aşamanın kökü /first_stage_ramdisk olarak değiştirir, ardından /system/bin/e2fsck öğesini yürütür.

2a seçeneği: Özel ve A/B kurtarma bölümü

A/B recovery bölümleri olan cihazlar için bu seçeneği kullanın; yani cihazda recovery_a ve recovery_b partition var. Bu tür cihazlar şunları içerir: Kurtarma bölümünün güncellenebileceği A/B ve Sanal A/B cihazları, şu yapılandırma:

AB_OTA_PARTITIONS += recovery

vendor_boot RAM'i, ramdisk'in ve tedarikçi firmanın tedarikçi bitlerini içerir. şunları içerir:

  • Cihaza özel fstab dosyaları

  • lib/modules (tedarikçi çekirdek modüllerini içerir)

recovery RAM'i tüm kurtarma kaynaklarını içerir. Bu tür cihazlarda ürün yapılandırması şu kaynaktan devralır: generic_ramdisk.mk.

BOARD (BOARD) değerlerini ayarlayın

A/B recovery bölümü olan cihazlar için aşağıdaki değerleri ayarlayın:

BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE := true
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true

recovery RAM diski bir /init -> /system/bin/init sembol bağlantısı içerebilir ve init_second_stage.recovery, /system/bin/init. Ancak, başlatma sırasında ramdisk, recovery ramdiskten sonra birleştirilir, /init sembolik bağlantısı üzerine yazılır. Cihaz, kurtarma modunda açıldığında /system/bin/init ikili program, ikinci aşamanın başlatılmasını desteklemek için gereklidir.

Cihaz recovery programına yüklendiğinde, recovery + vendor_boot + genel RAM'ler şunlardır:

  • /init (ramdisk'ten, init_first_stage'dan üretilmiş)
  • /system/bin/init (recovery ramdiskten, yapım init_second_stage.recovery ve /init tarihinden yürütüldü)

Cihaz Android'e başladığında vendor_boot + genel içerikleri ramdisk'ler şunlardır:

  • /init (genel ramdisk'ten, init_first_stage sitesinden oluşturuldu)

Fstab dosyalarını taşıma

Genel RAM'e yüklenen fstab dosyalarını vendor_ramdisk. Örneğin, bkz. değiştirin.

Modülleri yükleme

İsteğe bağlı olarak, vendor_ramdisk ürününe cihaza özel modüller yükleyebilirsiniz ( yoksa bu adımı etkinleştirmeniz gerekir. Init. kökü değiştirmez. Modüllerin vendor_ramdisk varyantı vendor_ramdisk kökü. Modülleri vendor_ramdisk, bkz. İlk aşama konsolu, Meta veri sağlamaları ve Sanal A/B uygulayın.

İlk aşama konsolu

Modüllerin vendor_ramdisk varyantını yüklemek için aşağıdakileri kullanın:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

Bu sayede linker, sh ve toybox, $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin, ardından vendor_ramdisk altında /system/bin.

İlk aşama konsol için gerekli modülleri (ör. adbd) eklemek üzere şunları etkinleştirin: İlgili yamaları yükleyerek bu modüllerin vendor_ramdisk varyantını AOSP'yi seçin, daha sonra aşağıdakileri kullanın,

PRODUCT_PACKAGES += adbd.vendor_ramdisk

Bu işlem, belirtilen modüllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin vendor_boot ramdisk kurtarma modunda yüklendiğinde, modül recovery dilinde de kullanılabilir. Öğe vendor_boot RAM diski kurtarma modunda yüklenmedi, cihaz isteğe bağlı olarak bunu yapabilir adbd.recovery uygulamasını da yükleyebilirsiniz.

Meta veri sağlamaları

Meta verileri desteklemek için sağlamalar ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır. aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

Örneğin, bkz. değişiklik listesi.

Sanal A/B sıkıştırması

Sanal A/B sıkıştırmasının desteklenmesi için snapuserd, vendor_ramdisk. Cihaz, virtual_ab_ota/compression.mk, (snapuserd) vendor_ramdisk varyantını yükler.

Başlatma işlemindeki değişiklikler

Android cihaz başlatılırken başlatma işlemi değişmez. vendor_boot + genel ramdisk, mevcut başlatma işlemine benzer, ancak fstab vendor_boot tarihinden itibaren yüklenir. system/bin/recovery var olmadığı için first_stage_init bunu normal bir başlatma gibi işler.

Kurtarma modundayken başlatma işlemi değişir. Kurtarma + vendor_boot + genel ramdisk, mevcut kurtarma işlemine benzer ancak çekirdek, recovery görüntüsü yerine boot görüntüsünden yüklenir. Kurtarma modu için başlatma işlemi aşağıdaki gibidir.

  1. Bootloader başlar ve ardından şunları yapar:

    1. Kurtarma işlemini + vendor_boot + genel RAM'i / hedefine aktarır. (OEM çekirdek modüllerini, kurtarma karma dosyalarındaki çekirdek modüllerini BOARD_RECOVERY_KERNEL_MODULES), vendor_boot isteğe bağlıdır.)
    2. boot bölümünden çekirdeği çalıştırır.
  2. Çekirdek, ramdisk'i / konumuna bağlar, ardından genel ramdisk'ten /init işlemini yürütür.

  3. İlk aşama başlatma, ardından şunları yapar:

    1. IsRecoveryMode() == true ve ForceNormalBoot() == false ayarlarını yapar.
    2. /lib/modules kaynağından tedarikçi çekirdek modüllerini yükler.
    3. DoFirstStageMount() çağrısı yapıyor ancak ekleme işlemini atlıyor çünkü IsRecoveryMode() == true. (Cihaz ramdisk'i yer açmaz (çünkü / hâlâ aynı), ancak SetInitAvbVersionInRecovery() çağrısı yapıyor.)
    4. İkinci aşama başlatma işlemini /system/bin/init konumundan recovery RAM'den başlatır.

e2fsck'yi kullanılabilir yap

Cihaz oluşturma dosyaları şunlardan devralabilir:

  • Cihaz sanal makineleri destekliyorsa virtual_ab_ota/launch_with_vendor_ramdisk.mk A/B testi yapabilirsiniz.

  • Cihaz sanal A/B'yi destekliyorsa virtual_ab_ota/compression.mk sağlayabilirsiniz.

Ürün oluşturma dosyaları yüklenir $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck Kuyruklu a işareti çalışma zamanından sonra init, /system/bin/e2fsck işlemini yürütür.

2b. Seçenek: Özel ve A/B olmayan kurtarma bölümü

A/B olmayan recovery bölümüne sahip cihazlar için bu seçeneği kullanın; yani cihazda, alan son eki olmayan recovery adlı bir bölüm var. Bu tür cihazlar şunlardır:

  • A/B olmayan cihazlar;
  • Kurtarma bölümü olmayan A/B ve Sanal A/B cihazları güncellenebilir. (Bu olağan dışıdır.)

vendor_boot RAM'i, ramdisk'in ve tedarikçi firmanın tedarikçi bitlerini içerir. şunları içerir:

  • Cihaza özel fstab dosyaları
  • lib/modules (tedarikçi çekirdek modüllerini içerir)

recovery görseli bağımsız olmalıdır. Şunu içermelidir: Aşağıdakiler dahil olmak üzere kurtarma modunu başlatmak için gereken tüm kaynaklar:

  • Çekirdek görüntüsü
  • DTBO görseli
  • lib/modules çekirdek modülleri
  • /init -> /system/bin/init sembolik bağlantı olarak ilk aşama başlatma
  • İkinci aşama başlatma ikilisi /system/bin/init
  • Cihaza özel fstab dosyaları
  • recovery ikili programı dahil diğer tüm kurtarma kaynakları

Bu tür cihazlarda ürün yapılandırması devralır başlangıç fiyatı: generic_ramdisk.mk.

BOARD (BOARD) değerlerini ayarlayın

A/B olmayan cihazlar için aşağıdaki değerleri ayarlayın:

BOARD_USES_RECOVERY_AS_BOOT :=
BOARD_USES_GENERIC_KERNEL_IMAGE := true
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT :=
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE :=
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT := true

recovery RAM'i bir /init -> /system/bin/init sembol bağlantısı içermelidir init_second_stage.recovery, /system/bin/init. Cihaz başlatıldığında geri yükleme modunda, ilk olarak her ikisini de desteklemek için /system/bin/init ikili programı gerekir ve ikinci aşamanın başlatılmasıyla ilgilidir.

Cihaz recovery çalıştırıldığında, recovery RAM'lerinin içeriği şu şekildedir:

  • /init -> /system/bin/init (recovery ramdiskten)
  • /system/bin/init (recovery ramdiskten, yapım init_second_stage.recovery ve /init tarihinden yürütüldü)

Cihaz Android'e başladığında vendor_boot + genel içerikleri ramdisk'ler şunlardır:

  • /init (ramdisk'ten, init_first_stage'dan üretilmiş)

Fstab dosyalarını taşıma

Genel RAM'e yüklenen fstab dosyalarını vendor_ramdisk ve recovery RAM diski. Örneğin, bkz. değiştirin.

Modülleri yükleme

Cihaza özel modülleri vendor_ramdisk ve recovery RAM (atla) yoksa bu adımı etkinleştirmeniz gerekir. init. kökü değiştirmez. Modüllerin vendor_ramdisk varyantı vendor_ramdisk kökü. Modüllerin recovery varyantı recovery ramdisk'in kökü. Modülleri vendor_ramdisk ve recovery RAM diski, se İlk aşama konsolu ve Meta veriler sağlamaları gibi bir değer ekleyin.

İlk aşama konsolu

Modüllerin vendor_ramdisk varyantını yüklemek için aşağıdakileri kullanın:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    shell_and_utilities_vendor_ramdisk \

Bu sayede linker, sh ve toybox, $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin, ardından vendor_ramdisk altında /system/bin.

İlk aşama konsol için gerekli modülleri (ör. adbd) eklemek üzere şunları etkinleştirin: İlgili yamaları yükleyerek bu modüllerin vendor_ramdisk varyantını AOSP'yi seçin, daha sonra aşağıdakileri kullanın,

PRODUCT_PACKAGES += adbd.vendor_ramdisk

Bu işlem, belirtilen modüllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin

Modüllerin recovery varyantını yüklemek için vendor_ramdisk öğesini şununla değiştirin: recovery:

PRODUCT_PACKAGES += \
    linker.recovery \
    shell_and_utilities_recovery \
    adbd.recovery \

Meta veri sağlamaları

Meta verileri desteklemek için sağlamalar ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır. aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin:

PRODUCT_PACKAGES += \
    linker.vendor_ramdisk \
    resize2fs.vendor_ramdisk \
    tune2fs.vendor_ramdisk \

Kurtarmada ilk aşama ekleme sırasında meta veri sağlama toplamlarını desteklemek için şunları etkinleştirin: bu modüllerin kurtarma varyantını kullanıyor ve bunları da yükleyin.

Başlatma işlemindeki değişiklikler

Android cihaz başlatılırken başlatma işlemi değişmez. vendor_boot + genel ramdisk, mevcut başlatma işlemine benzer, ancak fstab vendor_boot tarihinden itibaren yüklenir. system/bin/recovery var olmadığı için first_stage_init bunu normal bir başlatma gibi işler.

Kurtarma modundayken başlatma işlemi değişmez. Kurtarma ramdisk, mevcut kurtarma işlemiyle aynı şekilde yüklenir. Çekirdek, recovery görüntüsünden yüklenir. İlgili içeriği oluşturmak için kullanılan kurtarma modu için başlatma işlemi aşağıdaki gibidir.

  1. Bootloader başlar ve ardından şunları yapar:

    1. Kurtarma RAM diskini / hedefine aktarır.
    2. recovery bölümünden çekirdeği çalıştırır.
  2. Çekirdek, ramdisk'i / konumuna ekler ve ardından /init işlemini yürütür. Bu, recovery RAM'inden /system/bin/init.

  3. İlk aşama başlatma, ardından şunları yapar:

    1. IsRecoveryMode() == true ve ForceNormalBoot() == false ayarlarını yapar.
    2. /lib/modules kaynağından tedarikçi çekirdek modüllerini yükler.
    3. DoFirstStageMount() çağrısı yapıyor ancak ekleme işlemini atlıyor çünkü IsRecoveryMode() == true. (Cihaz ramdisk'i yer açmaz (çünkü / hâlâ aynı), ancak SetInitAvbVersionInRecovery() çağrısı yapıyor.)
    4. İkinci aşama başlatma işlemini /system/bin/init konumundan recovery RAM'den başlatır.

Başlatma görüntüsü zaman damgaları

Aşağıdaki kod, örnek bir boot resmi zaman damgası dosyasıdır:

####################################
# from generate-common-build-props
# These properties identify this partition image.
####################################
ro.product.bootimage.brand=Android
ro.product.bootimage.device=generic_arm64
ro.product.bootimage.manufacturer=unknown
ro.product.bootimage.model=AOSP on ARM64
ro.product.bootimage.name=aosp_arm64
ro.bootimage.build.date=Mon Nov 16 22:46:27 UTC 2020
ro.bootimage.build.date.utc=1605566787
ro.bootimage.build.fingerprint=Android/aosp_arm64/generic_arm64:S/MASTER/6976199:userdebug/test-keys
ro.bootimage.build.id=MASTER
ro.bootimage.build.tags=test-keys
ro.bootimage.build.type=userdebug
ro.bootimage.build.version.incremental=6976199
ro.bootimage.build.version.release=11
ro.bootimage.build.version.release_or_codename=S
ro.bootimage.build.version.sdk=30
# Auto-added by post_process_props.py
persist.sys.usb.config=none
# end of file
  • Derleme sırasında genel dosyaya system/etc/ramdisk/build.prop dosyası eklenir ramdisk'e bakın. Bu dosya, derlemenin zaman damgası bilgilerini içerir.

  • Çalışma zamanında, ilk aşama init kopyalar önce ramdisk'i boşaltmadan önce ramdiskten tmpfs'e dosya init. aşama okuyabilir boot resim zaman damgası özelliklerini ayarlamak için bu dosyayı kullanın.