Android 12'de Genel Çekirdek Görüntüsü (GKI) olarak adlandırılan genel boot
görüntüsü, genel ramdisk'i ve GKI çekirdeğini içerir.
Android 13 ile başlatılan cihazlarda, genel RAM diski boot
resminden kaldırılarak ayrı bir init_boot
resmine yerleştirilir. Bu değişiklik, boot
görüntüsünde yalnızca GKI çekirdeğini bırakır.
Android 12 veya daha eski çekirdek sürümlerini kullanmaya devam eden cihazların yükseltilmesi için yeni bir init_boot
resmi gerekmeden genel ramdisk olduğu yerde kalır.
Genel bir ramdisk oluşturmak için tedarikçiye özgü kaynakları, genel ramdisk yalnızca ilk aşamayı init
ve zaman damgası bilgileri içeren bir özellik dosyası içerecek şekilde ramdisk'in dışına taşıyın.
Aşağıdaki durumlardaki cihazlarda:
Özel bir
recovery
bölümü kullanmayın. Tüm kurtarma bitleri genel ramdisktenvendor_boot
ramdisk'e taşınır.Özel bir
recovery
bölümü kullanın.recovery
ramdisk kendi kendine yeterli olduğundanrecovery
ramdisk'te değişiklik yapılması gerekmez.
Mimari
Aşağıdaki şemalar, Android 12 ve sonraki sürümleri çalıştıran cihazların mimarisini göstermektedir.
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ükseltilen cihazlar, Android 12'de kullandıkları mimariyi kullanır.
Android 13 ile başlatma, özel kurtarma yok
Şekil 1. GKI ile kullanıma sunulan veya Android 13'e yükseltilen cihazlar (özel bir kurtarma işlemi yoktur).
Android 13, özel ve A/B kurtarma (özel ramdisk) ile başlatma
Şekil 2. GKI, özel ve A/B kurtarma özelliğine sahip, Android 13'ü kullanıma sunan veya Android 13'e yükselten cihazlar.
Cihazda recovery_a
ve recovery_b
bölümleri varsa bu resme bakın.
Android 13 ile özel ve A/B olmayan kurtarma (özel ramdisk)
Şekil 3. GKI, özel ve A/B olmayan kurtarma özelliğine sahip, Android 13'ü kullanıma sunan veya Android 13'e yükselten cihazlar.
Cihazınızda yuva son eki olmayan recovery
adlı bir bölüm varsa bu resme bakın.
Android 12'yi başlatma veya Android 12'ye yükseltme, özel kurtarma yok
Şekil 4. Android 12'yi çalıştıran veya Android 12'ye yükselten cihazlar (GKI ile), özel kurtarma yok.
Android 12'yi başlatma veya Android 12'ye yükseltme, özel ve A/B kurtarma (özel ramdisk)
Şekil 5. GKI, özel ve A/B kurtarma özelliğine sahip, Android 12'yi kullanıma sunan veya Android 12'ye yükselten cihazlar.
Cihazınızda 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)
Şekil 6. GKI, özel ve A/B olmayan kurtarma özelliğine sahip, Android 12'yi çalıştıran veya Android 12'ye yükselten cihazlar.
Cihazınızda slot son eki olmayan recovery
adlı bir bölüm varsa bu resme bakın.
Android 12'ye yükseltme, önyükleme olarak kurtarma (ramdisk olarak kurtarma)
Şekil 7. Android 12'ye yükseltilen cihazlar, GKI yok, önyükleme olarak kurtarma.
Android 12'ye yükseltme, özel kurtarma (özel ramdisk)
Şekil 8. Android 12'ye yükseltilen cihazlar, GKI yok, özel kurtarma.
Önyükleme resmi içerikleri
Android önyükleme resimleri şunları içerir:
Android 13 ile kullanıma sunulan cihazlar için
init_boot
resmi eklendi- Başlık sürümü V4
- Genel ramdisk görüntüsü
Genel
boot
resmi- 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 derlenmişboot.img
dosyası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
boot
resimlerine dahil edilir
- Yalnızca Android 12 ve önceki sürümlerdeki
- Başlık sürümü V3 veya
V4
vendor_boot
resmi (ayrıntılar için Tedarikçi Firma Önyükleme Bölümleri bölümüne bakın)vendor_boot
header- Cihaza özgü
cmdline
(BOARD_KERNEL_CMDLINE
)
- Cihaza özgü
vendor_boot
ramdisk resmilib/modules
- Kurtarma kaynakları (özel kurtarma yoksa)
dtb
resmi
recovery
resmi- Başlık 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'ne bakın. Örnek:
cmdline
,boot
vevendor_boot
cmdline
ile birleştirilmiyor.- Başlık, gerekirse kurtarma DTBO'sunu belirtir.
- A/B kurtarma bölümü için içerikler
boot
vevendor_boot
'ten birleştirilebilir veya çıkarılabilir. Örnek: cmdline
,boot
vevendor_boot
cmdline
ile birleştirilir.- DTBO,
vendor_boot
başlığından anlaşılabilir.
- Gerekirse kurtarma için cihaza özgü
recovery
ramdisk resmi- Kurtarma kaynakları
- A/B olmayan kurtarma bölümü için RAM diskinin içeriği bağımsız olmalıdır. Kurtarma Görüntüleri konusuna bakın. Örnek:
lib/modules
, kurtarma modunda önyükleme yapmak için gereken tüm çekirdek modüllerini içermelidir.- Kurtarma ramdisk'i
init
içermelidir. - A/B kurtarma bölümü için kurtarma ramdisk'i, genel ve
vendor_boot
ramdisk'ine eklenir. Bu nedenle, bağımsız olması gerekmez. Örnek: lib/modules
,vendor_boot
RAM diskindeki çekirdek modüllerinin yanı sıra, yalnızca kurtarma modunu başlatmak için gereken ek çekirdek modüllerini içerebilir./init
adresindeki sembolik bağlantı mevcut olabilir ancak önyükleme görüntüsünde ilk aşama/init
ikili dosyası tarafından gölgelenir.
- Başlık sürümü V2
Genel ramdisk görüntü içeriği
Genel ramdisk aşağıdaki bileşenleri içerir.
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
eşyalar- Bağlantı noktaları için boş dizinler:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
first_stage_ramdisk/
- Bağlantı noktaları için yinelenen boş dizinler:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
- Bağlantı noktaları için yinelenen boş dizinler:
Önyükleme görüntüsü entegrasyonu
Derleme işaretleri, init_boot
, boot
, recovery
ve vendor_boot
resimlerinin nasıl oluşturulacağını kontrol eder. Boole mantıksal panosunun değeri true
dizesi veya boş olmalıdır (varsayılan değer).
TARGET_NO_KERNEL
. Bu değişken, derlemenin önceden oluşturulmuş bir başlatma görüntüsü kullanıp kullanmadığını gösterir. Bu değişkentrue
olarak ayarlanmışsaBOARD_PREBUILT_BOOTIMAGE
'ü önceden oluşturulmuş önyükleme resminin konumuna (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
) ayarlayın.BOARD_USES_RECOVERY_AS_BOOT
. Bu değişken, cihazınboot
resmi olarakrecovery
resmini kullanıp kullanmadığını belirtir. GKI kullanılırken bu değişken boştur ve kurtarma kaynaklarıvendor_boot
alanına 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
öğesini etkilemez.Bu, kart 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ınınvendor_boot
için oluşturulup oluşturulmayacağını kontrol eder.true
olarak ayarlandığında kurtarma kaynakları yalnızcavendor-ramdisk/
için oluşturulur,recovery/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_boot
için oluşturulup oluşturulmayacağını kontrol eder.true
olarak ayarlandığında,BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
:Ayarlanırsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
olacak şekilde oluşturulur.Ayarlanmazsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
sistemine yerleşiktir.
Boş olduğunda
BOARD_RECOVERY_AS_ROOT
:Ayarlandıysa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
ürününe tasarlanmıştır.Ayarlanmamışsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/ramdisk/avb
olacak şekilde oluşturulur.
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
. Bu değişken,recovery
görüntüsünün çekirdek içerip içermediğini kontrol eder. Android 12 ile kullanıma sunulan ve A/Brecovery
bölümünü kullanan cihazlar bu değişkenitrue
olarak ayarlamalıdır. Android 12 ile kullanıma sunulan ve A/B olmayan bir sistem kullanan cihazların, kurtarma görüntüsünün kendi kendine yeterli kalması için bu değişkenifalse
olarak ayarlamalıdır.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
. Bu değişken,$OUT/boot*.img
'un hedef dosyalar altındaIMAGES/
'ye kopyalanıp kopyalanmayacağını kontrol eder.aosp_arm64
, bu değişkenitrue
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
öğesinin oluşturulup oluşturulmayacağını kontrol eder ve boyutunu ayarlar. Ayarlandığında, genel ramdiskboot.img
yerineinit_boot.img
öğesine eklenir veBOARD_AVB_INIT_BOOT*
değişkenlerinin zincir vbmeta için ayarlanmasını gerektirir.
İzin verilen kombinasyonlar
Bileşen veya değişken | Cihaz yükseltme işlemini kurtarma bölümü olmadan yapma | Kurtarma bölümüyle cihazı yeni sürüme geçir | Cihazı kurtarma bölümü olmadan başlatma | A/B kurtarma bölümüne sahip cihazı başlatma | A/B olmayan bir kurtarma bölümüne sahip cihazı başlatma | aosp_arm64 |
---|---|---|---|---|---|---|
boot içerir |
evet | evet | evet | evet | evet | evet |
init_boot (Android 13) 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 cihazlarda PRODUCT_BUILD_RECOVERY_IMAGE
, true
olarak ayarlanabilir veya boş bırakılabilir. Bu cihazlarda BOARD_RECOVERYIMAGE_PARTITION_SIZE
ayarlanırsa recovery
resmi oluşturulur.
Başlatma için zincirlenmiş vbmeta'yı etkinleştirme
Zincirlenmiş 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
Örneğin, bu değişikliği inceleyin.
Sistem-root
GKI kullanan cihazlarda kök olarak sistem desteklenmez. Bu tür cihazlarda BOARD_BUILD_SYSTEM_ROOT_IMAGE
boş olmalıdır. Kök olarak sistem özelliği, dinamik bölümler kullanan cihazlar için de 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
içinde aşağıdakileri belirtin:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
generic_ramdisk.mk
dosyası, diğer makefile'lerin yanlışlıkla ramdisk'e başka dosya yüklemesini de engeller (bu tür dosyaları vendor_ramdisk
'e 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 cihazlar arasında farklılık gösterir. Android 13, Android 12'dekine benzer şekilde ayarlanır.
Android 12'ye yükseltilen cihazlar:
BOARD_USES_RECOVERY_AS_BOOT
değerini koruyabilir. Bu durumda eski yapılandırmaları kullanıyorlar demektir ve yeni derleme değişkenleri boş olmalıdır. Bu tür cihazlar:BOARD_USES_RECOVERY_AS_BOOT
alanı boş olarak ayarlanabilir. Bu durumda, yeni yapılandırmalar kullanıyorlardır. Bu tür cihazlar:Özel bir
recovery
bölümü kullanmayın. Mimari, Şekil 1'de gösterildiği gibidir ve cihaz kurulumu seçeneği 1. Seçenek'tir.Özel bir
recovery
bölümü kullanın. Mimari, Şekil 2a veya Şekil 2b'de gösterildiği gibidir ve cihaz kurulum seçeneği 2a seçeneği veya 2b seçeneği'dir.
Android 12 ile kullanıma sunulan cihazlar,
BOARD_USES_RECOVERY_AS_BOOT
değerini boş olarak ayarlamalı ve yeni yapılandırmaları kullanmalıdır. Bu tür cihazlar:Özel bir
recovery
bölümü kullanmayın. Mimari, Şekil 1'de gösterildiği gibidir ve cihaz kurulum seçeneği 1. Seçenek'tir.Özel bir
recovery
bölümü kullanın. Mimari, Şekil 2a veya Şekil 2b'de gösterildiği gibidir ve cihaz kurulum seçeneği 2a seçeneği veya 2b seçeneği'dir.
aosp_arm64
yalnızca GKI oluşturduğundan (vendor_boot
veya kurtarma işlemini değil), tam bir hedef değildir. aosp_arm64
Derleme yapılandırmaları için generic_arm64
bölümüne bakın.
1. Seçenek: Özel bir kurtarma bölümü yok
recovery
bölümü olmayan cihazlar, boot
bölümünde genel boot
resmini içerir. vendor_boot
ramdisk'i, lib/modules
(tedarikçi çekirdek modülleri ile) dahil tüm kurtarma kaynaklarını içerir. Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk
kaynağından devralı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 programları ve sembolik bağlantılar
vendor_boot
RAM diski, /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 moduna açıldığında ikinci aşamalı başlatmayı desteklemek için /system/bin/init
ikili dosyası gerekir. vendor_boot
+ genel RAM'lerin içeriği aşağıdaki gibidir:
/init
(genel ramdisk'ten,init_first_stage
sitesinden oluşturuldu)/system/bin/init
(vendor_ramdisk
başlangıç fiyatıyla,init_second_stage.recovery
projesinden geliştirildi)
fstab dosyalarını taşıma
Genel RAM'e yüklenen fstab
dosyalarını vendor_ramdisk
konumuna taşıyın. Örneğin, bu değişikliğe bakın.
Modül yükleme
Cihazlara özel modülleri vendor_ramdisk
'e yükleyebilirsiniz (Yüklemeniz gereken cihaza özel modül yoksa bu adımı atlayın).
Modül
/first_stage_ramdisk
ürününe yüklenirken modülünvendor_ramdisk
varyantını kullanın. Bu modül,init
kökü/first_stage_ramdisk
olarak değiştirdikten sonra ancakinit
kökü/system
olarak değiştirdikten önce kullanılabilir. Örnekler için Meta veri sağlamaları ve Sanal A/B sıkıştırması bölümlerine bakın.Modül
/
'a yüklendiğinde modülünrecovery
varyantını kullanın. Bu modül,init
kökü/first_stage_ramdisk
olarak değiştirmeden önce kullanılabilir olmalıdır./
'e modül yükleme hakkında ayrıntılı bilgi için Birinci aşama konsolu başlıklı makaleyi inceleyin.
İlk aşama konsolu
İlk aşama konsolu, init
kök dizinini /first_stage_ramdisk
olarak değiştirmeden önce başladığından modüllerin recovery
varyantını yüklemeniz gerekir.
Varsayılan olarak her iki modül varyantı da build/make/target/product/base_vendor.mk
'e yüklenir. Bu nedenle, cihaz makefile'i bu dosyadan devralınırsa 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 işlem, linker
, sh
ve toybox
öğelerinin $ANDROID_PRODUCT_OUT/recovery/root/system/bin
ürününe yüklenmesini, ardından da vendor_ramdisk
altında /system/bin
uygulamasına yüklenmesini sağlar.
İlk aşama konsolu (ör. adbd) için gerekli modülleri eklemek isterseniz aşağıdakileri kullanın.
PRODUCT_PACKAGES += adbd.recovery
Bu şekilde, belirtilen modüllerin $ANDROID_PRODUCT_OUT/recovery/root/system/bin
'e yüklenmesi sağlanır. $ANDROID_PRODUCT_OUT/recovery/root/system/bin
, daha sonra vendor_ramdisk
altında /system/bin
'e yüklenir.
Meta veri sağlama toplamları
İlk aşamada bağlama sırasında meta veri sağlama toplamalarını desteklemek için GKI'yi desteklemeyen cihazlar aşağıdaki modüllerin ramdisk varyantını yükler. GKI için destek eklemek üzere modülleri $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
adresine taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örnek olarak bu değişiklik listesine göz atın.
Sanal A/B sıkıştırma
Sanal A/B sıkıştırmasının desteklenmesi için snapuserd
, vendor_ramdisk
konumuna yüklenmelidir. Cihaz, snapuserd
'in vendor_ramdisk
varyantını yükleyen virtual_ab_ota/compression.mk
kaynağından devralmalıdır.
Önyükleme sürecindeki değişiklikler
Kurtarma veya Android'i başlatma işlemi aşağıdaki istisna dışında değişmez:
- Ramdisk
build.prop
, ikinci aşamainit
'nin önyüklemenin derleme zaman damgasını okuyabilmesi için/second_stage_resources
'e taşınır.
Kaynaklar genel ramdisk'ten vendor_boot
ramdisk'e taşındığından, genel ramdisk'in vendor_boot
ramdisk'te birleştirilmesinin sonucu değişmez.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'leri aşağıdakilerden devralabilir:
Cihaz sanal A/B'yi destekleyip sıkıştırmayı desteklemiyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
.Cihaz sanal A/B sıkıştırmayı destekliyorsa
virtual_ab_ota/compression.mk
.
Ürün oluşturma dosyaları $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
yüklenir. Ç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.
2a seçeneği: Özel ve A/B kurtarma bölümü
Bu seçeneği, A/B recovery
bölümlerine sahip cihazlarda (yani cihazda recovery_a
ve recovery_b partition
varsa) kullanın. Bu tür cihazlar arasında, aşağıdaki yapılandırmayla kurtarma bölümünün güncellenebildiği A/B ve sanal A/B cihazlar yer alır:
AB_OTA_PARTITIONS += recovery
vendor_boot
RAM'i, aşağıdakiler de dahil olmak üzere ramdisk ve tedarikçi çekirdeği modüllerinin tedarikçi bitlerini içerir:
Cihaza özgü
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ı generic_ramdisk.mk
'den devralınır.
BOARD değerlerini ayarlama
A/B recovery
bölümüne sahip 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
İkili programlar ve sembolik bağlantılar
recovery
ramdisk'i bir /init -> /system/bin/init
sembolik bağlantısı ve /system/bin/init
adresinde init_second_stage.recovery
içerebilir. Bununla birlikte, başlatma RAM'i recovery
ram diskinden 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şamayı başlatma özelliğini desteklemek için /system/bin/init
ikilisi gerekir.
Cihaz recovery
'te başlatılırken recovery
+ vendor_boot
+ genel ramdisk'lerin içeriği aşağıdaki gibidir:
/init
(ramdisk'ten,init_first_stage
'ten derlenmiştir)/system/bin/init
(recovery
ramdisk'inden,init_second_stage.recovery
'den derlenmiş ve/init
'ten yürütülmüştür)
Cihaz Android'e başlatıldığında vendor_boot
ve genel RAM'lerin içeriği aşağıdaki gibi olur:
/init
(genel ramdisk'ten,init_first_stage
sitesinden oluşturuldu)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen fstab
dosyalarını vendor_ramdisk
'e taşıyın. Örneğin, bu değişikliği inceleyin.
Modülleri yükleme
İsteğe bağlı olarak, vendor_ramdisk
'e cihaza özgü modüller yükleyebilirsiniz (Yüklemeniz gereken cihaza özgü modül yoksa bu adımı atlayın). Init
kök kullanıcıya geçmez. Modüllerin vendor_ramdisk
varyantı, vendor_ramdisk
'ün köküne yüklenir. vendor_ramdisk
'e modül yüklemeyle ilgili örnekler için Birinci aşama konsolu, Meta veri sağlama toplama ve Sanal A/B sıkıştırma başlıklı makalelere 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 sayede linker
, sh
ve toybox
, $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
'e yüklenir. $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
daha sonra vendor_ramdisk
altındaki /system/bin
'e yüklenir.
İ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 sayede, belirtilen modüller $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
'e yüklenir. vendor_boot
ramdisk'i kurtarma modunda yüklenirse modül recovery
'te de kullanılabilir. vendor_boot
ramdisk'i kurtarma modunda yüklenmezse cihaz isteğe bağlı olarak adbd.recovery
'ı da yükleyebilir.
Meta veri sağlama toplamları
İlk aşamada bağlama sırasında meta veri sağlama toplamaları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
'ye taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örnek olarak bu değişiklik listesine göz atın.
Sanal A/B sıkıştırma
Sanal A/B sıkıştırmayı desteklemek için snapuserd
, vendor_ramdisk
'e yüklenmelidir. Cihaz, snapuserd
'in vendor_ramdisk
varyantını yükleyen virtual_ab_ota/compression.mk
kaynağından devralmalıdır.
Önyükleme sürecindeki değişiklikler
Android cihaz başlatılırken başlatma işlemi değişmez. vendor_boot
+ genel ramdisk, fstab
'un vendor_boot
'ten yüklenmesi dışında mevcut önyükleme işlemine benzer. system/bin/recovery
olmadığından first_stage_init
bunu normal bir önyükleme olarak işler.
Kurtarma modundayken başlatma işlemi değişir. Kurtarma + vendor_boot
+ genel ramdisk, mevcut kurtarma işlemine benzer ancak çekirdek, recovery
resmi yerine boot
resminden yüklenir.
Kurtarma modu için önyükleme işlemi aşağıdaki gibidir.
Önyükleme yükleyici başlar ve aşağıdakileri yapar:
- Kurtarma +
vendor_boot
+ genel ramdisk'i/
'a gönderir. (OEM,BOARD_RECOVERY_KERNEL_MODULES
'e ekleyerek çekirdek modüllerini kurtarma ramdisk'inde kopyalarsavendor_boot
isteğe bağlıdır.) boot
bölümünden çekirdeği çalıştırır.
- Kurtarma +
Çekirdek, ramdisk'i
/
'e bağlar ve ardından genel ramdisk'ten/init
'ı yürütür.İlk aşamada init başlar ve aşağıdakileri yapar:
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlarını yapar./lib/modules
'ten tedarikçi firma çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapar ancakIsRecoveryMode() == true
nedeniyle bağlamayı atlar. (Cihaz ramdisk'i yer açmaz (/
hâlâ aynı olduğu için) ancakSetInitAvbVersionInRecovery()
çağırır.)- İkinci aşama başlatma işlemini
/system/bin/init
konumundanrecovery
RAM'den başlatır.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'leri aşağıdakilerden devralabilir:
Cihaz sanal A/B'yi destekleyip sıkıştırmayı desteklemiyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
.Cihaz sanal A/B sıkıştırmayı destekliyorsa
virtual_ab_ota/compression.mk
.
Ürün oluşturma dosyaları $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
yüklenir. Çalışma zamanında, ilk aşama init
, /system/bin/e2fsck
'ı yürütür.
2b seçeneği: Özel ve A/B olmayan kurtarma bölümü
A/B olmayan bir recovery
bölümü olan cihazlar için bu seçeneği kullanın. Yani cihazda, yuva son eki olmayan recovery
adlı bir bölüm olmalıdır. Bu tür cihazlar şunlardır:
- A/B olmayan cihazlar;
- Kurtarma bölümü güncellenemez olan A/B ve Sanal A/B cihazları. (Bu olağan dışı bir durumdur.)
vendor_boot
ramdisk'i, ramdisk'in tedarikçi bitlerini ve aşağıdakiler dahil olmak üzere tedarikçi çekirdek modüllerini içerir:
- Cihaza özgü
fstab
dosyaları lib/modules
(tedarikçi çekirdek modülleri dahil)
recovery
resmi bağımsız olmalıdır. Aşağıdakiler dahil olmak üzere kurtarma modunu başlatmak için gereken tüm kaynakları içermelidir:
- Çekirdek resmi
- DTBO resmi
lib/modules
çekirdek modülleri- Simge bağlantısı olarak ilk aşamada başlatma
/init -> /system/bin/init
- İkinci aşama init ikili dosyası
/system/bin/init
- Cihaza özgü
fstab
dosyaları recovery
ikili dosyası dahil diğer tüm kurtarma kaynakları
Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk
'den devralınır.
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
Başlatma ikili programları ve sembolik bağlantılar
recovery
ramdisk'inde bir /init -> /system/bin/init
sembolik bağlantısı ve /system/bin/init
adresinde init_second_stage.recovery
bulunmalıdır. Cihaz kurtarma modunda açıldığında hem birinci aşama hem de ikinci aşama init'i desteklemek için /system/bin/init
ikili dosyası gerekir.
Cihaz recovery
'te önyüklendiğinde recovery
ramdisk'lerinin içeriği aşağıdaki gibidir:
/init -> /system/bin/init
(recovery
ramdisk'inden)/system/bin/init
(recovery
ramdiskten,init_second_stage.recovery
kaynağından oluşturuldu ve/init
kaynağından yürütüldü)
Cihaz Android'de önyüklendiğinde vendor_boot
+ genel ramdisk'lerin içeriği aşağıdaki gibidir:
/init
(ramdisk'ten,init_first_stage
'ten derlenmiştir)
Fstab dosyalarını taşıma
Genel ramdisk'e yüklenen tüm fstab
dosyalarını vendor_ramdisk
ve recovery
ramdisk'ine taşıyın. Örneğin, bu değişikliğe bakın.
Modülleri yükleme
vendor_ramdisk
ve recovery
ramdisk'e cihaza özel modüller yükleyebilirsiniz (yüklenecek cihaza özel modülleriniz yoksa bu adımı atlayın). init
kök kullanıcıya geçmez. Modüllerin vendor_ramdisk
varyantı, vendor_ramdisk
'ün köküne yüklenir. Modüllerin recovery
varyantı, recovery
ramdisk'in köküne yüklenir. Modülleri vendor_ramdisk
ve recovery
ramdisk'ine yüklemeyle ilgili örnekler için Birinci aşama konsolu ve Meta veri sağlama toplamları bölümünü inceleyin.
İ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
'e yüklenir. $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
daha sonra vendor_ramdisk
altındaki /system/bin
'e yüklenir.
İ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 sayede, belirtilen modüller $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
'e yüklenir.
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ı
GKI'yi desteklemeyen cihazlar, ilk aşamada bağlama sırasında meta veri sağlama toplamalarını desteklemek için 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
'ye taşıyın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Kurtarma sırasında ilk aşamada bağlama sırasında meta veri sağlama toplamalarını desteklemek için bu modüllerin kurtarma varyantını etkinleştirin ve yükleyin.
Önyükleme sürecindeki değişiklikler
Android'e önyükleme yaparken önyükleme işlemi değişmez. vendor_boot
+ genel ramdisk, fstab
'un vendor_boot
'ten yüklenmesi dışında mevcut önyükleme işlemine benzer. system/bin/recovery
mevcut olmadığı için
first_stage_init
bunu normal başlatma olarak işler.
Kurtarma modundayken başlatma işlemi değişmez. Kurtarma ramdisk'i, mevcut kurtarma süreciyle aynı şekilde yüklenir.
Çekirdek, recovery
görüntüsünden yüklenir. Kurtarma modu için önyükleme işlemi aşağıdaki gibidir.
Önyükleme yükleyici başlar ve aşağıdakileri yapar:
- Kurtarma RAM'ini
/
hedefine aktarır. - Çekirdeği
recovery
bölümünden çalıştırır.
- Kurtarma RAM'ini
Çekirdek, ramdisk'i
/
'e bağlar ve ardındanrecovery
ramdisk'indeki/system/bin/init
için sembolik bağlantı olan/init
'ı yürütür.İlk aşama başlatma, ardından şunları yapar:
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlarını yapar./lib/modules
'ten tedarikçi firma çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapar ancakIsRecoveryMode() == true
nedeniyle bağlamayı atlar. (Cihaz ramdisk'i yer açmaz (/
hâlâ aynı olduğu için) ancakSetInitAvbVersionInRecovery()
çağırır.)recovery
ramdisk'inden/system/bin/init
adresinden ikinci aşama init'i başlatır.
Önyükleme görüntüsü zaman damgaları
Aşağıdaki kod, örnek bir boot
resim 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 ramdisk'e bir
system/etc/ramdisk/build.prop
dosyası eklenir. Bu dosya, derlemenin zaman damgası bilgilerini içerir.Çalışma zamanında, ilk aşama
init
, ramdisk'i boşaltmadan önce dosyaları ramdisk'tentmpfs
'a kopyalar. Böylece ikinci aşamainit
,boot
resim zaman damgası özelliklerini ayarlamak için bu dosyayı okuyabilir.