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 kullanıma sunulan cihazlarda genel ramdisk, boot
görüntüsünden kaldırılır ve 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ğ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ı ramdisk'ten çıkarın. Böylece, genel ramdisk yalnızca ilk aşama init
ve zaman damgası bilgilerini içeren bir mülk dosyası içerir.
Aşağıdaki durumlarda olan cihazlarda:
Özel bir
recovery
bölümü kullanmayın. Tüm kurtarma bitleri genel ramdisk'tenvendor_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. Android 13'ün kullanıma sunulduğu veya Android 13'e yükseltilen cihazlar (GKI ile, özel kurtarma yok).
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 bu sürüme yükselten cihazlar.
Cihazınızda 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 slot 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.
Özel ve A/B olmayan kurtarma (özel ramdisk) özelliğini kullanarak Android 12'yi başlatma veya Android 12'ye yükseltme
Ş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, önyükleme olarak kurtarma (ramdisk olarak kurtarma) sürümüne yükseltme
Ş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- Ü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 Resimleri bölümüne bakın. Örnek:
cmdline
,boot
vevendor_boot
cmdline
ile birleştirilmemiştir.- 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
üst bilgisinden çıkarılabilir.
- Gerekirse kurtarma için cihaza özgü
recovery
ramdisk resmi- 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. Örnek:
lib/modules
, kurtarma modunu başlatmak 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
ramdisk'indeki ç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.
- Üstbilgi 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
props- 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 tablo değişkeninin 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 önyükleme resmi kullanıp kullanmadığını belirtir. 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ı gösterir. GKI kullanıldığında 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 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_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.Ayarlanmamışsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
olacak şekilde oluşturulur.
Boş olduğunda
BOARD_RECOVERY_AS_ROOT
:Ayarlanırsa GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
olacak şekilde oluşturulur.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
resminin ç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 boyutu ayarlar. Ayarlandığında genel ramdisk,boot.img
yerineinit_boot.img
'e eklenir ve zincirlenmiş vbmeta içinBOARD_AVB_INIT_BOOT*
değişkenlerinin 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ı yükseltme | 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
Kök olarak sistem, GKI kullanan cihazlarda 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
bölümünde şunları 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
değerini boş olarak ayarlayabilir. 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 cihazlarda
BOARD_USES_RECOVERY_AS_BOOT
boş olarak ayarlanmalı ve yeni yapılandırmalar kullanılmalı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şturur (vendor_boot
veya kurtarma değil), bu nedenle 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 kurtarma bölümü yok
recovery
bölümü olmayan cihazlarda, boot
bölümünde genel boot
resmi bulunur. 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
'den 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
Init ikili programları ve sembolik bağlantılar
vendor_boot
ramdisk'i, /init
ile /system/bin/init
arasında bir sembolik bağlantı ve /system/bin/init
'de 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 ramdisk'lerin içeriği aşağıdaki gibidir:
/init
(init_first_stage
'ten oluşturulan genel ramdisk'ten)/system/bin/init
(vendor_ramdisk
tarafından,init_second_stage.recovery
'den oluşturuldu)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen fstab
dosyalarını vendor_ramdisk
klasörüne taşıyın. Örneğin, bu değişikliği inceleyin.
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
'a yüklendiğinde 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ğlama toplama ve Sanal A/B sıkıştırma başlıklı makalelere 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ü /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 sayede linker
, sh
ve toybox
, $ANDROID_PRODUCT_OUT/recovery/root/system/bin
'e yüklenir. $ANDROID_PRODUCT_OUT/recovery/root/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 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'yı 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
'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
Kurtarma moduna veya Android'e önyükleme 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'le birleştirilmesinin sonucu değişmez.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'leri şu kaynaklardan devralabilir:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
(cihaz 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'leri 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.
2a seçeneği: Özel ve A/B kurtarma bölümü
A/B recovery
bölümlerine sahip cihazlarda (yani cihazda recovery_a
ve recovery_b partition
varsa) bu seçeneği 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
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
ramdisk'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
Init ikili 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. Ancak önyükleme ramdisk'i recovery
ramdisk'inden sonra birleştirildiği için /init
sembolik bağlantısının üzerine yazılır. Cihaz kurtarma modunda açıldığında, ikinci aşamalı başlatmayı desteklemek için /system/bin/init
kodunun yüklenmesi 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'de açıldığında vendor_boot
+ genel ramdisk'lerin içeriği aşağıdaki gibidir:
/init
(init_first_stage
'ten oluşturulan genel ramdisk'ten)
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ül yükleme
İsteğe bağlı olarak, cihaza özgü modülleri vendor_ramdisk
'e 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üllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
'e yüklenmesi sağlanır. vendor_boot
ramdisk 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'yı 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 listesini inceleyebilirsiniz.
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'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
olmadığından first_stage_init
bunu normal bir önyükleme olarak işler.
Kurtarma modunda önyükleme yapıldığında önyükleme 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.) - Çekirdeği
boot
bölümünden ç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
değerlerini ayarlar./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 boşaltmaz (/
hâlâ aynı olduğu için) ancakSetInitAvbVersionInRecovery()
'u çağırır.)recovery
ramdisk'inden/system/bin/init
adresinden ikinci aşama init'i başlatır.
e2fsck'yi kullanılabilir hale getirme
Cihaz makefile'leri şu kaynaklardan devralabilir:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
(cihaz 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'leri yüklenir$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
. Ç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ünün güncellenemediği 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
'teki ç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 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
Init ikili 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çermelidir. Cihaz kurtarma modunda açıldığında hem birinci aşama hem de ikinci aşama başlatmayı 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
ramdisk'inden,init_second_stage.recovery
'den derlenmiş ve/init
'ten yürütülmüştür)
Cihaz Android'de açıldığında 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ği inceleyin.
Modül yükleme
Cihaza özgü modülleri vendor_ramdisk
ve recovery
ramdisk'ine 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. Modüllerin recovery
varyantı, recovery
ramdisk'in köküne yüklenir. vendor_ramdisk
ve recovery
ramdisk'ine modül yüklemeyle ilgili örnekler için İlk 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üllerin $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
'e yüklenmesi sağlanır.
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ş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 \
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
olmadığından first_stage_init
bunu normal bir önyükleme olarak işler.
Kurtarma modunda 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 ramdisk'ini
/
'e gönderir. - Çekirdeği
recovery
bölümünden çalıştırır.
- Kurtarma ramdisk'ini
Çekirdek, ramdisk'i
/
'e bağlar ve ardındanrecovery
ramdisk'indeki/system/bin/init
için bir sembolik bağlantı olan/init
'ı yürütür.İlk aşamada init başlar ve aşağıdakileri yapar:
IsRecoveryMode() == true
veForceNormalBoot() == false
değerlerini ayarlar./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 boşaltmaz (/
hâlâ aynı olduğu için) ancakSetInitAvbVersionInRecovery()
'u ç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.