Android 12'de, boot genel görüntüsü, Genel Çekirdek Görüntüsü (GKI) olarak adlandırılır ve genel ramdisk ile GKI çekirdeğini içerir.
Android 13 ile kullanıma sunulan cihazlarda genel ramdisk, boot görüntüsünden kaldırılıp ayrı bir init_boot görüntüsüne yerleştirilir. Bu değişiklik, boot görüntüsünde yalnızca GKI çekirdeğinin kalmasına neden olur.
Android 12 veya daha eski çekirdek sürümlerini kullanmaya devam eden cihazların yükseltilmesi için genel ramdisk, yeni bir init_boot görüntüsü gerektirmeden olduğu yerde kalır.
Genel bir ramdisk oluşturmak için satıcıya özel kaynakları ramdisk'ten çıkarın. Böylece genel ramdisk yalnızca ilk aşama init ve zaman damgası bilgilerini içeren bir özellik dosyası içerir.
Aşağıdaki durumda olan cihazlarda:
Özel bir
recoverybölümü kullanmayın. Tüm kurtarma bitleri, genel ramdisktenvendor_bootramdiskine taşınır.recoverybölümünü kullanın.recoveryramdisk bağımsız olduğundanrecoveryramdisk'te değişiklik yapılması gerekmez.
Mimari
Aşağıdaki şemalarda, Android 12 ve sonraki sürümleri çalıştıran cihazların mimarisi gösterilmektedir.
Android 13 ile kullanıma sunulan cihazlarda, genel ramdisk'i içeren yeni bir init_boot resmi bulunur.
Android 12'den Android 13'e yükseltme yapan cihazlar, Android 12'de kullandıkları mimariyi kullanır.
Android 13 ile kullanıma sunulur, özel kurtarma yoktur
1. şekil. GKI ile Android 13'e yükseltilen veya Android 13'ü kullanıma sunan cihazlarda özel kurtarma bölümü yoktur.
Android 13 ile kullanıma sunulur, özel ve A/B kurtarma (özel ramdisk)
Şekil 2. GKI, özel ve A/B kurtarma özellikleriyle Android 13'e yükseltilen veya Android 13'ün yüklendiği cihazlar.
Cihazda recovery_a ve recovery_b bölümleri varsa bu şekle bakın.
Android 13 ile kullanıma sunulur, özel ve A/B olmayan kurtarma (özel ramdisk)
3.Şekil Android 13'e yükseltilen veya Android 13 ile kullanıma sunulan, GKI, özel ve A/B olmayan kurtarma bölümlerine sahip cihazlar.
Cihazda yuva son eki olmadan recovery adlı bir bölüm varsa bu şekle bakın.
Android 12'ye geçiş veya yükseltme, özel kurtarma yok
Şekil 4. GKI ile Android 12'ye yükseltilen veya Android 12'nin yüklendiği cihazlarda özel kurtarma bölümü yoktur.
Android 12'ye geçiş veya yükseltme, özel ve A/B kurtarma (özel ramdisk)
5.şekil GKI, özel ve A/B kurtarma özellikleriyle Android 12'ye yükseltilen veya Android 12'nin yüklendiği cihazlar.
Cihazda recovery_a ve recovery_b bölümleri varsa bu şekle bakın.
Android 12'yi başlatma veya Android 12'ye yükseltme, özel ve A/B olmayan kurtarma (özel ramdisk)
6.şekil GKI, özel ve A/B olmayan kurtarma ile Android 12'ye yükseltilen veya Android 12 ile kullanıma sunulan cihazlar.
Cihazda yuva son eki olmadan recovery adlı bir bölüm varsa bu şekle bakın.
Android 12'ye yükseltme, recovery-as-boot (recovery-as-ramdisk)
Şekil 7. Android 12'ye yükseltilen, GKI'siz, recovery-as-boot cihazlar.
Android 12'ye yükseltme, özel kurtarma (özel ramdisk)
Şekil 8. Android 12'ye yükseltilen cihazlar, GKI yok, özel kurtarma.
Önyükleme görüntüsü içerikleri
Android başlatma görüntüleri aşağıdakileri içerir.
Android 13 ile kullanıma sunulan cihazlar için
init_bootresmi eklendi- Başlık sürümü V4
- Genel ramdisk görüntüsü
Genel
bootresim- Başlık sürümü V3 veya
V4
- GKI boot.img sertifikası için
boot_signature(yalnızca v4). Sertifikalı GKIboot.img, Doğrulanmış Başlatma için imzalanmamış. OEM'ler, önceden oluşturulmuşboot.imgdosyasını cihaza özel bir AVB anahtarıyla imzalamaya devam etmelidir. - Genel
cmdline(GENERIC_KERNEL_CMDLINE) - GKI çekirdeği
- GKI boot.img sertifikası için
- Genel ramdisk görüntüsü
- Yalnızca Android 12 ve önceki sürümlerdeki
bootresimlerinde bulunur.
- Yalnızca Android 12 ve önceki sürümlerdeki
- Başlık sürümü V3 veya
V4
vendor_bootresmi (ayrıntılar için Vendor Boot Partitions bölümüne bakın)vendor_bootheader- Cihaza özgü
cmdline(BOARD_KERNEL_CMDLINE)
- Cihaza özgü
vendor_bootramdisk görüntüsülib/modules- Kurtarma kaynakları (özel kurtarma yoksa)
dtbresmi
recoveryresmi- Üstbilgi sürümü V2
- Gerekirse kurtarma için cihaza özgü
cmdline - A/B olmayan kurtarma bölümü için başlığın içeriği bağımsız olmalıdır. Kurtarma görüntüleri bölümüne bakın. Örneğin:
cmdline,bootvevendor_bootcmdlineile birleştirilmiyor.- Gerekirse başlık, kurtarma DTBO'sunu belirtir.
- A/B kurtarma bölümü için içerikler birleştirilebilir veya
bootvevendor_boot'dan çıkarılabilir. Örneğin: cmdline,bootvevendor_bootcmdlineile birleştirilir.- DTBO,
vendor_bootüstbilgisinden çıkarılabilir.
- Gerekirse kurtarma için cihaza özgü
recoveryramdisk görüntüsü- Kurtarma kaynakları
- A/B olmayan kurtarma bölümü için ramdisk'in içeriği bağımsız olmalıdır. Kurtarma Görüntüleri bölümüne bakın. Örneğin:
lib/modules, kurtarma modunu başlatmak için gereken tüm çekirdek modüllerini içermelidir.- Kurtarma ramdiski
initiçermelidir. - A/B kurtarma bölümünde, kurtarma ramdiski genel ve
vendor_bootramdiskine eklenir. Bu nedenle bağımsız olması gerekmez. Örneğin: lib/modules,vendor_bootramdisk'teki çekirdek modüllerinin yanı sıra kurtarma modunun başlatılması için gereken ek çekirdek modüllerini içerebilir./initkonumundaki sembolik bağlantı mevcut olabilir ancak önyükleme görüntüsündeki birinci aşama/initikilisi tarafından gölgede bırakılır.
- Üstbilgi sürümü V2
Genel ramdisk görüntü içerikleri
Genel ramdisk aşağıdaki bileşenleri içerir.
initsystem/etc/ramdisk/build.propro.PRODUCT.bootimg.* buildprops- Bağlama noktaları için boş dizinler:
debug_ramdisk/,mnt/,dev/,sys/,proc/,metadata/ first_stage_ramdisk/- Bağlama noktaları için yinelenen boş dizinler:
debug_ramdisk/,mnt/,dev/,sys/,proc/,metadata/
- Bağlama noktaları için yinelenen boş dizinler:
Başlatma görüntüsü entegrasyonu
Derleme işaretleri, init_boot, boot, recovery ve vendor_boot resimlerinin nasıl oluşturulacağını kontrol eder. Boole türündeki bir pano değişkeninin değeri true dizesi olmalı veya boş olmalıdır (varsayılan değer).
TARGET_NO_KERNEL. Bu değişken, derlemede önceden oluşturulmuş bir önyükleme görüntüsünün kullanılıp kullanılmadığını gösterir. Bu değişkentrueolarak ayarlanırsaBOARD_PREBUILT_BOOTIMAGEdeğişkenini önceden oluşturulmuş önyükleme görüntüsünün konumuna (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img) ayarlayın.BOARD_USES_RECOVERY_AS_BOOT. Bu değişken, cihazınbootresmi olarakrecoveryresmini kullanıp kullanmadığını gösterir. GKI kullanılırken bu değişken boş olur ve kurtarma kaynaklarıvendor_bootkonumuna taşınmalıdır.BOARD_USES_GENERIC_KERNEL_IMAGE. Bu değişken, kartın GKI kullandığını gösterir. Bu değişken, sysprops veyaPRODUCT_PACKAGES'ı etkilemez.Bu, kart düzeyinde GKI anahtarıdır. Aşağıdaki tüm değişkenler bu değişkenle sınırlanır.
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT. Bu değişken,vendor_bootiçin ramdisk kurtarma kaynaklarının oluşturulup oluşturulmayacağını kontrol eder.trueolarak ayarlandığında kurtarma kaynakları yalnızcavendor-ramdisk/için oluşturulur verecovery/root/için oluşturulmaz.Boş olduğunda kurtarma kaynakları yalnızca
recovery/root/için oluşturulur vevendor-ramdisk/için oluşturulmaz.
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT. Bu değişken, GSI AVB anahtarlarınınvendor_bootiçin oluşturulup oluşturulmayacağını kontrol eder.trueolarak ayarlandığında,BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOTise:Ayarlanır. GSI AVB anahtarları,
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avbolacak şekilde oluşturulur.Ayarlanmamışsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avbolacak şekilde oluşturulur.
Boş olduğunda,
BOARD_RECOVERY_AS_ROOTise:Ayarlanır. GSI AVB anahtarları,
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avbolacak şekilde oluşturulur.Ayarlanmamışsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/ramdisk/avbolacak şekilde oluşturulur.
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE. Bu değişken,recoveryresminin çekirdek içerip içermediğini kontrol eder. Android 12 ile kullanıma sunulan ve A/Brecoverybölümünü kullanan cihazlar bu değişkenitrueolarak ayarlamalıdır. Android 12 ile kullanıma sunulan ve A/B olmayan cihazlar, kurtarma görüntüsünün bağımsız kalması için bu değişkenifalseolarak ayarlamalıdır.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES. Bu değişken, hedef dosyalarda$OUT/boot*.imgöğesininIMAGES/altına kopyalanıp kopyalanmayacağını kontrol eder.aosp_arm64, bu değişkenitrueolarak 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.imgoluşturulup oluşturulmayacağını kontrol eder ve boyutu ayarlar. Ayarlandığında, genel ramdiskboot.imgyerineinit_boot.img'ya eklenir ve zincirleme vbmeta içinBOARD_AVB_INIT_BOOT*değişkenlerinin ayarlanmasını gerektirir.
İzin verilen kombinasyonlar
| Bileşen veya değişken | Kurtarma bölümü olmadan cihazı yükseltme | Kurtarma bölümü olan cihazları yükseltme | Kurtarma bölümü olmadan cihazı başlatma | A/B kurtarma bölümüyle cihazı başlatma | A/B olmayan kurtarma bölümüyle cihazı başlatma | aosp_arm64 |
|---|---|---|---|---|---|---|
boot içerir |
evet | evet | evet | evet | evet | evet |
init_boot (Android 13) sürümünü içerir. |
no | no | evet | evet | evet | evet |
vendor_boot içerir |
isteğe bağlı | isteğe bağlı | evet | evet | evet | no |
recovery içerir |
no | evet | no | evet | evet | no |
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 recovery bölümü olan cihazlar PRODUCT_BUILD_RECOVERY_IMAGE değerini true veya boş olarak ayarlayabilir. Bu cihazlarda, BOARD_RECOVERYIMAGE_PARTITION_SIZE ayarlanmışsa recovery resmi oluşturulur.
Önyükleme için zincirleme vbmeta'yı etkinleştirme
Zincirleme vbmeta, boot ve init_boot resimleri için etkinleştirilmelidir. Aşağıdakileri belirtin:
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
Örnek olarak bu değişikliğe bakın.
System-as-root
GKI kullanan cihazlarda system-as-root desteklenmez. Bu tür cihazlarda BOARD_BUILD_SYSTEM_ROOT_IMAGE boş olmalıdır. System-as-root, dinamik bölümleri kullanan cihazlarda da desteklenmez.
Ürün yapılandırmaları
Genel ramdisk kullanan cihazlar, ramdisk'e yüklenmesine izin verilen dosyaların listesini yüklemelidir. Bunun için device.mk bölümünde aşağıdakileri belirtin:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
generic_ramdisk.mk dosyası, diğer makefile'ların ramdisk'e yanlışlıkla başka dosyalar yüklemesini de engeller (bu tür dosyaları vendor_ramdisk konumuna taşıyın).
Cihazları ayarla
Kurulum talimatları, Android 13 ile kullanıma sunulan, Android 12'ye yükseltilen ve Android 12 ile kullanıma sunulan cihazlara göre farklılık gösterir. Android 13'te, Android 12'deki gibi ayarlanır.
Android 12'ye yükseltilen cihazlar:
BOARD_USES_RECOVERY_AS_BOOTdeğerini koruyabilir. Bu durumda eski yapılandırmalar kullanılıyor ve yeni derleme değişkenleri boş olmalıdır. Bu tür cihazlar:BOARD_USES_RECOVERY_AS_BOOTboş olarak ayarlanabilir. Bu durumda yeni yapılandırmalar kullanılıyor demektir. Bu tür cihazlar:Özel bir
recoverybölümü kullanmayın. Mimari, Şekil 1'de gösterildiği gibidir ve cihaz kurulumu seçeneği Seçenek 1'dir.recoverybölümünü kullanın. Mimari, Şekil 2a veya Şekil 2b'de gösterildiği gibidir ve cihaz kurulumu seçeneği Seçenek 2a veya Seçenek 2b'dir.
Android 12 ile kullanıma sunulan cihazlar,
BOARD_USES_RECOVERY_AS_BOOTdeğerini boş olarak ayarlamalı ve yeni yapılandırmaları kullanmalıdır. Bu tür cihazlar:Özel bir
recoverybölümü kullanmayın. Mimari, Şekil 1'de gösterildiği gibidir ve cihaz kurulumu seçeneği Seçenek 1'dir.Özel bir
recoverybölümü kullanın. Mimari, Şekil 2a veya Şekil 2b'de gösterildiği gibidir ve cihaz kurulumu seçeneği Seçenek 2a veya Seçenek 2b'dir.
aosp_arm64 yalnızca GKI (vendor_boot veya kurtarma değil) oluşturduğundan tam bir hedef değildir. aosp_arm64derleme yapılandırmaları için generic_arm64 başlıklı makaleyi inceleyin.
1. seçenek: Özel kurtarma bölümü yok
recovery bölümü olmayan cihazlarda, boot bölümünde genel boot görüntüsü bulunur. vendor_boot ramdisk'inde lib/modules (satıcı çekirdek modülleriyle birlikte) dahil olmak üzere tüm kurtarma kaynakları bulunur. Bu tür cihazlarda ürün yapılandırması, generic_ramdisk.mk'dan devralınır.
BOARD değerlerini ayarlama
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
Başlatma ikili dosyaları ve sembolik bağlantıları
vendor_boot ramdiski, /init ile /system/bin/init arasında bir sembolik bağlantı ve /system/bin/init konumunda init_second_stage.recovery içerebilir. Ancak genel ramdisk, vendor_boot ramdisk'ten sonra birleştirildiği için /init sembolik bağlantısının üzerine yazılır. Cihaz kurtarma modunda başlatıldığında ikinci aşama başlatma işlemini desteklemek için /system/bin/init ikili dosyası gerekir. vendor_boot + genel ramdisklerin içerikleri şunlardır:
/init(init_first_stagekullanılarak oluşturulan genel ramdisk'ten)/system/bin/init(vendor_ramdisktarafından,init_second_stage.recoverykullanılarak oluşturuldu)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen fstab dosyalarını vendor_ramdisk konumuna taşıyın. Örnek olarak bu değişikliğe bakın.
Modül yükleme
Cihaza özel modülleri vendor_ramdisk yükleyebilirsiniz (yüklenecek cihaza özel modülünüz yoksa bu adımı atlayın).
Modül
/first_stage_ramdisk'e yüklendiğinde modülünvendor_ramdiskvaryantını kullanın. Bu modül,initkökünü/first_stage_ramdiskolarak değiştirdikten sonra ancakinitkökünü/systemolarak değiştirmeden önce kullanılabilir olmalıdır. Örnekler için Meta veri sağlama toplamları ve Sanal A/B sıkıştırma bölümlerine bakın.Modül
/'e yüklendiğinde modülünrecoveryvaryantını kullanın. Bu modül,init, kökü/first_stage_ramdiskolarak değiştirmeden önce kullanılabilir olmalıdır. Modüllerin/'ya yüklenmesiyle ilgili ayrıntılar için İlk aşama konsolu başlıklı makaleyi inceleyin.
İlk aşama konsolu
İlk aşama konsolu, init kökü /first_stage_ramdisk olarak değiştirmeden önce başladığı için modüllerin recovery varyantını yüklemeniz gerekir.
Varsayılan olarak her iki modül varyantı da build/make/target/product/base_vendor.mk konumuna yüklenir. Bu nedenle, cihaz makefile'ı bu dosyadan devralınıyorsa 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, linker, sh ve toybox cihazlarının $ANDROID_PRODUCT_OUT/recovery/root/system/bin'e, ardından $ANDROID_PRODUCT_OUT/recovery/root/system/bin'ün vendor_ramdisk altında /system/bin'e yüklenmesini sağlar.
İlk aşama konsolu için gereken modülleri (ör. adbd) eklemek üzere aşağıdakileri kullanın.
PRODUCT_PACKAGES += adbd.recovery
Bu işlem, belirtilen modüllerin $ANDROID_PRODUCT_OUT/recovery/root/system/bin'ya, ardından vendor_ramdisk altında /system/bin'ya yüklenmesini sağlar.
Meta veri sağlama toplamları
İlk aşama bağlama sırasında meta veri sağlama toplamlarını desteklemek için GKI'yi desteklemeyen cihazlar aşağıdaki modüllerin ramdisk varyantını yükler. GKI desteği eklemek için modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin konumuna taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örnek için bu değişiklik listesine bakın.
Sanal A/B sıkıştırma
Sanal A/B sıkıştırmayı desteklemek için snapuserd, vendor_ramdisk'ye yüklenmelidir. Cihaz, snapuserd'nin vendor_ramdisk varyantını yükleyen virtual_ab_ota/compression.mk'dan devralmalıdır.
Önyükleme sürecindeki değişiklikler
Kurtarma moduna veya Android'e başlatma işlemi, aşağıdaki istisna dışında değişmez:
- Ramdisk
build.prop, ikinci aşamainit'nın önyüklemenin derleme zaman damgasını okuyabilmesi için/second_stage_resources'ye taşınır.
Kaynaklar genel ramdiskten vendor_boot ramdiskine taşındığı için genel ramdiskin vendor_boot ramdiskine eklenmesinin sonucu değişmez.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'ları şu dosyalardan devralınabilir:
virtual_ab_ota/launch_with_vendor_ramdisk.mkCihaz, sanal A/B'yi destekliyor ancak sıkıştırmayı desteklemiyorsa.Cihaz, sanal A/B sıkıştırmayı destekliyorsa
virtual_ab_ota/compression.mk
Ürün makefile'ları yüklenir
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck. Çalışma zamanında, ilk aşama init kökü /first_stage_ramdisk olarak değiştirir ve ardından /system/bin/e2fsck'yi yürütür.
Seçenek 2a: Özel ve A/B kurtarma bölümü
Bu seçeneği A/B recovery bölümleri olan cihazlar için kullanın. Yani cihazda recovery_a ve recovery_b partition bölümleri olmalıdır. Bu tür cihazlar arasında, kurtarma bölümü güncellenebilen aşağıdaki yapılandırmaya sahip A/B ve Virtual A/B cihazlar yer alır:
AB_OTA_PARTITIONS += recovery
vendor_boot ramdisk, aşağıdakiler de dahil olmak üzere ramdisk'in tedarikçi bitlerini ve tedarikçi çekirdek modüllerini içerir:
Cihaza özel
fstabdosyalarılib/modules(tedarikçi çekirdek modülleri dahil)
recovery ramdisk'i tüm kurtarma kaynaklarını içerir. Bu tür cihazlarda ürün yapılandırması, generic_ramdisk.mk'dan devralınır.
BOARD değerlerini ayarlama
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
Başlatma ikili dosyaları ve sembolik bağlantıları
recovery ramdisk, /init -> /system/bin/init sembolik bağlantısını ve /system/bin/init konumunda init_second_stage.recovery öğesini içerebilir. Ancak boot ramdisk, recovery ramdisk'ten sonra birleştirildiğinden /init sembolik bağlantısının üzerine yazılır. Cihaz kurtarma modunda başlatıldığında, ikinci aşama başlatmayı desteklemek için /system/bin/init
ikili dosyası gerekir.
Cihaz recovery'e başlatıldığında recovery +
vendor_boot + genel ramdisklerin içeriği aşağıdaki gibidir:
/init(init_first_stagekullanılarak oluşturulan ramdisk'ten)/system/bin/init(init_second_stage.recoverykaynağından oluşturulan ve/initkonumundan yürütülenrecoveryramdisk'ten)
Cihaz Android'e önyüklendiğinde vendor_boot + genel ramdisklerin içeriği aşağıdaki gibidir:
/init(init_first_stagekullanılarak oluşturulan genel ramdisk'ten)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen fstab dosyalarını vendor_ramdisk konumuna taşıyın. Örnek olarak bu değişikliğe bakın.
Modül yükleme
İsteğe bağlı olarak, vendor_ramdisk için cihaza özel modüller yükleyebilirsiniz (yüklenecek cihaza özel modülünüz yoksa bu adımı atlayın). Init
kök değiştirmiyor. Modüllerin vendor_ramdisk varyantı, vendor_ramdisk kök dizinine yüklenir. Modülleri vendor_ramdisk'ya yükleme örnekleri için Birinci aşama konsol, Meta veri
sağlama toplamları ve Sanal A/B
sıkıştırma bölümlerine bakı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, linker, sh ve toybox cihazlarının $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin'e, ardından $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin'ün vendor_ramdisk altında /system/bin'e yüklenmesini sağlar.
İlk aşama konsolu için gereken modülleri (ör. adbd) eklemek üzere ilgili yamaları AOSP'ye yükleyerek bu modüllerin vendor_ramdisk varyantını etkinleştirin ve ardından aşağıdakileri kullanın.
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Bu, belirtilen modüllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin konumuna yüklenmesini sağlar. vendor_boot ramdisk
kurtarma modunda yüklenirse modül recovery'de de kullanılabilir. Kurtarma modunda vendor_boot ramdisk yüklenmezse cihaz isteğe bağlı olarak adbd.recovery da yükleyebilir.
Meta veri sağlama toplamları
İlk aşama bağlama sırasında meta veri sağlama toplamlarını desteklemek için GKI'yi desteklemeyen cihazlar aşağıdaki modüllerin ramdisk varyantını yükler. GKI desteği eklemek için modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin konumuna taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örnek için bu değişiklik listesine bakın.
Sanal A/B sıkıştırma
Sanal A/B sıkıştırmayı desteklemek için snapuserd, vendor_ramdisk konumuna yüklenmelidir. Cihaz, snapuserd'nin vendor_ramdisk varyantını yükleyen virtual_ab_ota/compression.mk'dan devralmalıdır.
Önyükleme sürecindeki değişiklikler
Android'e önyükleme yaparken önyükleme süreci değişmez. vendor_boot +
generic ramdisk, fstab'in vendor_boot'dan yüklenmesi dışında mevcut başlatma işlemine benzer. system/bin/recovery bulunmadığından first_stage_init, normal bir başlatma işlemi olarak ele alır.
Kurtarma modunda önyükleme yaparken önyükleme işlemi değişir. Kurtarma +
vendor_boot + genel ramdisk, mevcut kurtarma işlemine benzer ancak çekirdek, recovery görüntüsünden değil boot görüntüsünden yüklenir.
Kurtarma modunda başlatma işlemi aşağıdaki gibidir.
Önyükleyici başlatılır ve ardından şunlar yapılır:
- Kurtarma +
vendor_boot+ genel ramdisk'i/konumuna gönderir. (OEM, çekirdek modülleriniBOARD_RECOVERY_KERNEL_MODULES'ya ekleyerek kurtarma ramdisk'inde çoğaltıyorsavendor_bootisteğe bağlıdır.) - Çekirdeği
bootbölümünden çalıştırır.
- Kurtarma +
Çekirdek, ramdisk'i
/konumuna bağlar ve ardından genel ramdisk'ten/initkomutunu yürütür.İlk aşama başlatılır ve ardından aşağıdakiler yapılır:
IsRecoveryMode() == trueveForceNormalBoot() == falsedeğerlerini ayarlar./lib/moduleskonumundan tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()çağrısı yapılıyor ancakIsRecoveryMode() == truenedeniyle bağlama işlemi atlanıyor. (Cihaz, ramdisk'i boşaltmaz (çünkü/hâlâ aynıdır) ancakSetInitAvbVersionInRecovery()'yi çağırır.)recoveryramdisk'inden/system/bin/initile ikinci aşama başlatma işlemi başlatılıyor.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'ları şu dosyalardan devralınabilir:
virtual_ab_ota/launch_with_vendor_ramdisk.mkCihaz, sanal A/B'yi destekliyor ancak sıkıştırmayı desteklemiyorsa.Cihaz, sanal A/B sıkıştırmayı destekliyorsa
virtual_ab_ota/compression.mk
Ürün makefile'ları yüklenir
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck. Çalışma zamanında ilk aşama init yürütülür /system/bin/e2fsck.
2b seçeneği: Özel ve A/B olmayan kurtarma bölümü
A/B olmayan recovery bölümü olan cihazlar için bu seçeneği kullanın. Yani cihazda, yuva soneki olmayan recovery adlı bir bölüm vardır. Bu tür cihazlar şunlardır:
- A/B olmayan cihazlar,
- Kurtarma bölümü güncellenemeyen A/B ve Sanal A/B cihazlar. (Bu olağan dışı bir durumdur.)
vendor_boot ramdisk, aşağıdakiler de dahil olmak üzere ramdisk'in tedarikçi bitlerini ve tedarikçi çekirdek modüllerini içerir:
- Cihaza özel
fstabdosyaları lib/modules(tedarikçi çekirdek modülleri dahil)
recovery resmi bağımsız olmalıdır. Kurtarma modunu başlatmak için gereken tüm kaynakları içermelidir. Örneğin:
- Çekirdek resmi
- DTBO görüntüsü
lib/modulesbölgesindeki çekirdek modülleri- Sembolik bağlantı olarak ilk aşama başlatma
/init -> /system/bin/init - İkinci aşama başlatma ikilisi
/system/bin/init - Cihaza özel
fstabdosyaları recoveryikili dosyası da dahil olmak üzere diğer tüm kurtarma kaynakları
Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk'dan devralınır.
BOARD değerlerini ayarlama
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
Başlatma ikili dosyaları ve sembolik bağlantıları
recovery ramdisk'i bir /init -> /system/bin/init sembolik bağlantısı ve /system/bin/init konumunda init_second_stage.recovery içermelidir. Cihaz kurtarma modunda başlatıldığında hem birinci aşama hem de ikinci aşama başlatma işlemini desteklemek için /system/bin/init ikili dosyası gerekir.
Cihaz recovery olarak başlatıldığında recovery ramdisklerinin içeriği aşağıdaki gibidir:
/init -> /system/bin/init(recoveryramdisk'ten)/system/bin/init(init_second_stage.recoverykaynağından oluşturulan ve/initkonumundan yürütülenrecoveryramdisk'ten)
Cihaz Android'e önyüklendiğinde vendor_boot + genel ramdisklerin içeriği aşağıdaki gibidir:
/init(init_first_stagekullanılarak oluşturulan ramdisk'ten)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen tüm fstab dosyalarını vendor_ramdisk ve recovery ramdisk'e taşıyın. Örnek olarak bu değişikliğe bakın.
Modül yükleme
Cihaza özel modülleri vendor_ramdisk ve recovery ramdisk'e yükleyebilirsiniz (yüklenecek cihaza özel modülünüz yoksa bu adımı atlayın). init
kök değiştirmiyor. Modüllerin vendor_ramdisk varyantı, vendor_ramdisk kök dizinine yüklenir. Modüllerin recovery varyantı, recovery ramdisk'in kök dizinine yüklenir. Modülleri vendor_ramdisk ve recovery ramdisk'e yükleme örnekleri için Birinci aşama konsolu ve Meta veri sağlama toplamları bölümlerine bakı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, linker, sh ve toybox cihazlarının $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin'e, ardından $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin'ün vendor_ramdisk altında /system/bin'e yüklenmesini sağlar.
İlk aşama konsolu için gereken modülleri (ör. adbd) eklemek üzere ilgili yamaları AOSP'ye yükleyerek bu modüllerin vendor_ramdisk varyantını etkinleştirin ve ardından aşağıdakileri kullanın.
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Bu, belirtilen modüllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin konumuna yüklenmesini sağlar.
Modüllerin recovery varyantını yüklemek için vendor_ramdisk yerine recovery yazın:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
Meta veri sağlama toplamları
İlk aşama bağlama sırasında meta veri sağlama toplamlarını desteklemek için GKI'yi desteklemeyen cihazlar aşağıdaki modüllerin ramdisk varyantını yükler. GKI desteği eklemek için modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin konumuna taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Kurtarma sırasında ilk aşama bağlama işleminde meta veri sağlama toplamalarını desteklemek için bu modüllerin kurtarma varyantını etkinleştirin ve bunları da yükleyin.
Önyükleme sürecindeki değişiklikler
Android'e önyükleme yaparken önyükleme süreci değişmez. vendor_boot +
generic ramdisk, fstab'in vendor_boot'dan yüklenmesi dışında mevcut başlatma işlemine benzer. system/bin/recovery bulunmadığından first_stage_init, normal bir başlatma işlemi olarak ele alır.
Kurtarma modunda başlatma işlemi değişmez. Kurtarma ramdiski, mevcut kurtarma işlemiyle aynı şekilde yüklenir.
Çekirdek, recovery görüntüsünden yüklenir. Kurtarma modundaki
başlatma işlemi aşağıdaki gibidir.
Önyükleyici başlatılır ve ardından şunlar yapılır:
- Kurtarma ramdiskini
/konumuna gönderir. - Çekirdeği
recoverybölümünden çalıştırır.
- Kurtarma ramdiskini
Çekirdek, ramdisk'i
/konumuna bağlar ve ardındanrecoveryramdisk'indeki/system/bin/initkonumuna sembolik bağlantı olan/initdosyasını çalıştırır.İlk aşama başlatılır ve ardından aşağıdakiler yapılır:
IsRecoveryMode() == trueveForceNormalBoot() == falsedeğerlerini ayarlar./lib/moduleskonumundan tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()çağrısı yapılıyor ancakIsRecoveryMode() == truenedeniyle bağlama işlemi atlanıyor. (Cihaz, ramdisk'i boşaltmaz (çünkü/hâlâ aynıdır) ancakSetInitAvbVersionInRecovery()'yi çağırır.)recoveryramdisk'inden/system/bin/initile ikinci aşama başlatma işlemi başlatılıyor.
Önyükleme görüntüsü zaman damgaları
Aşağıdaki kod, boot resim zaman damgası dosyası örneğidir:
####################################
# 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 ramdisk'e bir
system/etc/ramdisk/build.propdosyası eklenir. Bu dosya, derlemenin zaman damgası bilgilerini içerir.Çalışma zamanında, birinci aşama
init, ramdisk'i boşaltmadan önce ramdisk'teki dosyalarıtmpfs'ye kopyalar. Böylece ikinci aşamainit,bootgörüntü zaman damgası özelliklerini ayarlamak için bu dosyayı okuyabilir.