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 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ünü yalnızca GKI çekirdeğinde bırakır.
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üne gerek kalmadan olduğu yerde kalır.
Genel bir ramdisk oluşturmak için satıcıya özel kaynakları, genel ramdiskin yalnızca ilk aşama init
ve zaman damgası bilgilerini içeren bir özellik dosyasını içerecek şekilde ramdiskin dışına taşıyın.
Şu özelliklere sahip 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
ramdiski bağımsız olduğundanrecovery
ramdiskinde herhangi bir değişiklik yapılmasına gerek yoktur.
Mimari
Aşağıdaki diyagramlar Android 12 ve üstünü çalıştıran cihazların mimarisini göstermektedir. Android 13 ile başlatılan cihazlarda genel ramdisk'i içeren yeni bir init_boot
görüntüsü bulunur. Android 12'den Android 13'e yükseltilen cihazlar, Android 12'de kullanılan mimarinin aynısını kullanır.
Android 13 ile başlatın, özel kurtarma gerekmez
Şekil 1. GKI ile Android 13'ü başlatan veya bu sürüme yükseltilen, özel kurtarma işlemi olmayan cihazlar
Android 13, özel ve A/B kurtarma (özel ramdisk) ile lansman
Şekil 2. GKI, özel ve A/B kurtarma özellikli Android 13'ü başlatan veya bu sürüme yükseltilen cihazlar
Aygıtta recovery_a
ve recovery_b
bölümleri varsa bu şekle bakın.
Android 13, özel ve A/B olmayan kurtarma (özel ramdisk) ile lansman
Şekil 3. GKI, özel ve A/B olmayan kurtarma özelliğine sahip Android 13'ü başlatan veya bu sürüme yükseltilen cihazlar
Aygıtta yuva son eki olmayan recovery
adlı bir bölüm varsa bu şekle bakın.
Android 12'yi başlatın veya bu sürüme yükseltin; özel kurtarma gerekmez
Şekil 4. GKI ile Android 12'yi başlatan veya Android 12'ye yükselten, özel kurtarma işlemi olmayan cihazlar
Özel ve A/B kurtarma (özel ramdisk) Android 12'yi başlatın veya bu sürüme yükseltin
Şekil 5. GKI, özel ve A/B kurtarma özellikli Android 12'yi başlatan veya bu sürüme yükseltilen cihazlar
Aygıtta recovery_a
ve recovery_b
bölümleri varsa bu şekle bakın.
Özel ve A/B olmayan kurtarma (özel ramdisk) Android 12'yi başlatın veya bu sürüme yükseltin
Şekil 6. GKI, özel ve A/B olmayan kurtarma ile Android 12'yi başlatan veya bu sürüme yükseltilen cihazlar
Aygıtta yuva son eki olmayan recovery
adlı bir bölüm varsa bu şekle bakın.
Android 12'ye yükseltme, önyükleme olarak kurtarma (ramdisk olarak kurtarma)
Şekil 7. Android 12'ye yükseltilen, GKI olmayan, önyükleme olarak kurtarmalı 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üleri içerikleri
Android önyükleme görüntüleri aşağıdakileri içerir.
Android 13 ile başlatılan cihazlar için
init_boot
görüntüsü eklendi- Başlık sürümü V4
- Genel ramdisk görüntüsü
Genel
boot
görüntüsü- Başlık sürümü V3 veya V4
- GKI boot.img sertifikası için bir
boot_signature
(yalnızca v4). Sertifikalı GKIboot.img
dosyası, doğrulanmış önyükleme için imzalanmadı. OEM'lerin önceden oluşturulmuşboot.img
dosyasını yine de cihaza özel bir AVB anahtarıyla imzalaması gerekir. - Genel
cmdline
(GENERIC_KERNEL_CMDLINE
) - GKI çekirdeği
- GKI boot.img sertifikası için bir
- Genel ramdisk görüntüsü
- Yalnızca Android 12 ve önceki sürümlerdeki
boot
görüntülerine dahildir
- Yalnızca Android 12 ve önceki sürümlerdeki
- Başlık sürümü V3 veya V4
vendor_boot
görüntüsü (ayrıntılar için bkz. Satıcı Önyükleme Bölümleri )-
vendor_boot
başlığı- Cihaza özel
cmdline
(BOARD_KERNEL_CMDLINE
)
- Cihaza özel
-
vendor_boot
ramdisk görüntüsü-
lib/modules
- Kurtarma kaynakları (özel kurtarma yoksa)
-
-
dtb
resmi
-
recovery
görüntüsü- Başlık sürümü V2
- Gerekirse kurtarma için cihaza özel
cmdline
- A/B olmayan kurtarma bölümü için başlığın içeriği bağımsız olmalıdır; bkz. Kurtarma Görüntüleri . Örneğin:
-
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 birleştirilebilir veya
boot
vevendor_boot
çıkarılabilir. Örneğin: -
cmdline
boot
vevendor_boot
cmdline
birleştirilir. - DTBO,
vendor_boot
başlığından çıkarılabilir.
- Gerekirse kurtarma için cihaza özel
-
recovery
ramdisk görüntüsü- Kurtarma kaynakları
- A/B olmayan kurtarma bölümü için, ramdiskin içeriği bağımsız olmalıdır; bkz. Kurtarma Görüntüleri . Örneğin:
-
lib/modules
kurtarma modunu başlatmak için gereken tüm çekirdek modüllerini içermelidir - Kurtarma ramdiskinin
init
içermesi gerekir. - A/B kurtarma bölümü için kurtarma ramdiski, jenerik ve
vendor_boot
ramdiskinin önüne eklenir, dolayısıyla bağımsız olması gerekmez. Örneğin: -
lib/modules
vendor_boot
ramdisk'teki ç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ündeki ilk aşama/init
ikili dosyası tarafından gölgede bırakılır.
- Başlık sürümü V2
Genel ramdisk görüntü içerikleri
Genel ramdisk aşağıdaki bileşenleri içerir.
-
init
-
system/etc/ramdisk/build.prop
eklendi -
ro. PRODUCT .bootimg.* build
malzemeleri - 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:
Önyükleme görüntüsü entegrasyonu
Derleme bayrakları init_boot
, boot
, recovery
ve vendor_boot
görüntülerinin nasıl oluşturulduğunu denetler. Boolean board değişkeninin değeri true
dizesi olmalı veya boş olmalıdır (bu varsayılandır).
TARGET_NO_KERNEL
. Bu değişken, yapının önceden oluşturulmuş bir önyükleme görüntüsü kullanıp kullanmadığını gösterir. Bu değişkentrue
olarak ayarlanmışsaBOARD_PREBUILT_BOOTIMAGE
öğesini önceden oluşturulmuş önyükleme görüntüsünün konumuna ayarlayın (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
)BOARD_USES_RECOVERY_AS_BOOT
. Bu değişken, aygıtınrecovery
görüntüsünüboot
görüntüsü olarak kullanıp kullanmadığını gösterir. GKI kullanırken bu değişken boştur ve kurtarma kaynaklarınınvendor_boot
taşınması gerekir.BOARD_USES_GENERIC_KERNEL_IMAGE
. Bu değişken kartın GKI kullandığını gösterir. Bu değişken sysprops'u veyaPRODUCT_PACKAGES
etkilemez.Bu, kart düzeyindeki GKI anahtarıdır; Aşağıda listelenen tüm değişkenler bu değişken tarafından kısıtlanmıştır.
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
. Bu değişken, ramdisk kurtarma kaynaklarınınvendor_boot
oluşturulup oluşturulmadığını kontrol eder.true
olarak ayarlandığında, kurtarma kaynakları yalnızcavendor-ramdisk/
e oluşturulur verecovery/root/
a 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
oluşturulup oluşturulmadığını kontrol eder.true
olarak ayarlandığındaBOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
ise:Ayarlandığında, GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
olarak oluşturulur.Ayarlanmadığında, GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
olarak oluşturulur.
Boş olduğunda
BOARD_RECOVERY_AS_ROOT
ise:Ayarlandığında, GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
olarak oluşturulur.Ayarlanmadığında, GSI AVB anahtarları
$ANDROID_PRODUCT_OUT/ramdisk/avb
olarak 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 başlatılan ve A/Brecovery
bölümünü kullanan cihazların bu değişkenitrue
olarak ayarlaması gerekir. Android 12 ile başlatılan ve A/B olmayanı kullanan cihazların, kurtarma görüntüsünün bağımsız kalması için bu değişkenifalse
olarak ayarlaması gerekir.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
. Bu değişken$OUT/boot*.img
hedef dosyalar altındakiIMAGES/
dosyasına 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şkeninit_boot.img
dosyasının oluşturulup oluşturulmadığını kontrol eder ve boyutu ayarlar. Ayarlandığında genel ramdisk,boot.img
yerineinit_boot.img
dosyasına eklenir ve zincirleme vbmeta içinBOARD_AVB_INIT_BOOT*
değişkenlerinin ayarlanmasını gerektirir.
İzin verilen kombinasyonlar
Bileşen veya değişken | recovery bölümü olmadan cihazı yükseltme | Cihazı recovery bölümüyle yükseltme | Cihazı recovery bölümü olmadan başlatın | Cihazı A/B recovery bölümüyle başlatın | Cihazı A/B olmayan recovery bölümüyle başlatın | aosp_arm64 |
---|---|---|---|---|---|---|
boot içerir | Evet | Evet | Evet | Evet | Evet | Evet |
init_boot içerir (Android 13) | HAYIR | HAYIR | Evet | Evet | Evet | Evet |
vendor_boot içerir | isteğe bağlı | isteğe bağlı | Evet | Evet | Evet | HAYIR |
recovery içerir | HAYIR | Evet | HAYIR | Evet | Evet | HAYIR |
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 ya da boş | boş | true ya da boş | true ya da 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üne sahip cihazlar, PRODUCT_BUILD_RECOVERY_IMAGE
öğesini true
veya boş olarak ayarlayabilir. Bu cihazlar için BOARD_RECOVERYIMAGE_PARTITION_SIZE
ayarlanmışsa bir recovery
görüntüsü oluşturulur.
Önyükleme için zincirleme vbmeta'yı etkinleştir
boot
ve init_boot
görüntüleri için zincirleme vbmeta'nın etkinleştirilmesi gerekir. 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.
Kök olarak sistem
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, dinamik bölümleri kullanan cihazlarda da desteklenmez.
Ürün konfigürasyonları
Genel ramdisk'i kullanan aygıtların, ramdisk'e kurulmasına izin verilen dosyaların bir listesini yüklemesi gerekir. Bunu yapmak için, device.mk
dosyasında aşağıdakileri belirtin:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
generic_ramdisk.mk
dosyası ayrıca diğer makefile dosyalarının yanlışlıkla başka dosyaları ramdisk'e yüklemesini de önler (bu tür dosyaları bunun yerine vendor_ramdisk
taşıyın).
Cihazları kurma
Kurulum talimatları, Android 13 ile başlatılan, Android 12'ye yükseltilen ve Android 12 ile başlatılan cihazlar arasında farklılık gösterir. Android 13, Android 12'dekine benzer şekilde kurulur
Android 12'ye Yükseltilen Cihazlar:
BOARD_USES_RECOVERY_AS_BOOT
değerini koruyabilir. Bunu yaparlarsa eski yapılandırmaları kullanıyorlardır ve yeni yapı değişkenlerinin boş olması gerekir. Bu tür cihazlar varsa:BOARD_USES_RECOVERY_AS_BOOT
true
olarak ayarlayın, mimari Şekil 3'te gösterildiği gibidir.BOARD_USES_RECOVERY_AS_BOOT
boş olarak ayarlayın, mimari Şekil 4'te gösterildiği gibidir.
BOARD_USES_RECOVERY_AS_BOOT
boş olarak ayarlanabilir. Eğer bunu yaparlarsa, yeni konfigürasyonlar kullanıyorlardır. Bu tür cihazlar varsa:Özel bir
recovery
bölümü kullanmayın; mimari Şekil 1'de gösterildiği gibidir ve cihaz kurulum seçeneği Seçenek 1'dir .Ö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 Seçenek 2a veya Seçenek 2b'dir .
Android 12 ile başlatılan cihazların
BOARD_USES_RECOVERY_AS_BOOT
boş ve yeni yapılandırmaları kullanacak şekilde ayarlaması gerekir. Bu tür cihazlar varsa:Özel bir
recovery
bölümü kullanmayın; mimari Şekil 1'de gösterildiği gibidir ve cihaz kurulum seçeneği Seçenek 1'dir .Ö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 Seçenek 2a veya Seçenek 2b'dir .
aosp_arm64
yalnızca GKI oluşturduğundan (ve vendor_boot
veya kurtarmayı oluşturmadığından) tam bir hedef değildir. aosp_arm64
yapı yapılandırmaları için generic_arm64
bakın.
Seçenek 1: Özel kurtarma bölümü yok
recovery
bölümü olmayan aygıtlar, boot
bölümünde genel boot
görüntüsünü içerir. vendor_boot
ramdisk'i, lib/modules
(satıcı çekirdek modülleriyle birlikte) dahil olmak üzere tüm kurtarma kaynaklarını içerir. Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk
dosyasından devralınır .
KART değerlerinin ayarlanması
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
İkili dosyaları ve sembolik bağlantıları başlatın
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'inden sonra birleştirildiğinden, /init
sembolik bağlantısının üzerine yazılır. Cihaz kurtarma işlemine önyüklendiğinde, ikinci aşama başlatmayı desteklemek için /system/bin/init
ikili dosyasına ihtiyaç vardır. vendor_boot
+ jenerik ramdisklerin içerikleri aşağıdaki gibidir:
-
/init
(init_first_stage
oluşturulan genel ramdisk'ten) -
/system/bin/init
(vendor_ramdisk
,init_second_stage.recovery
oluşturulmuş)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen tüm fstab
dosyalarını vendor_ramdisk
taşıyın. Örnek olarak bu değişikliğe bakın.
Modülleri yükleme
İsterseniz cihaza özel modülleri vendor_ramdisk
yükleyebilirsiniz (kurmanız gereken cihaza özel modülleriniz yoksa bu adımı atlayın).
Modül
/first_stage_ramdisk
kurulduğunda modülünvendor_ramdisk
değişkenini kullanın. Bu modülinit
kökü/first_stage_ramdisk
olarak değiştirdikten sonra, ancakinit
kökü/system
olarak değiştirmeden önce mevcut olmalıdır. Örnekler için bkz. Meta veri sağlama toplamları ve Sanal A/B sıkıştırması .Modül
/
konumuna yüklendiğinde modülünrecovery
varyantını kullanın. Bu modül,init
kökü/first_stage_ramdisk
olarak değiştirmesinden önce mevcut olmalıdır. Modülleri/
konumuna yüklemeyle ilgili ayrıntılar için bkz. Birinci aşama konsolu .
İ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 çeşidi build/make/target/product/base_vendor.mk
dosyasına yüklenir; dolayısıyla, cihazın makefile dosyası bu dosyadan miras alı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, linker
, sh
ve toybox
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
dizinine kurulmasını ve daha sonra vendor_ramdisk
altında /system/bin
dizinine yüklenmesini sağlar.
İlk aşama konsolu için gereken modülleri (örneğin adbd) eklemek için aşağıdakileri kullanın.
PRODUCT_PACKAGES += adbd.recovery
Bu, belirtilen modüllerin $ANDROID_PRODUCT_OUT/recovery/root/system/bin
dizinine kurulmasını ve ardından vendor_ramdisk
altındaki /system/bin
dizinine yüklenmesini sağlar.
Meta veri sağlama toplamları
İlk aşama montajı 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 olarak bu değişiklik listesine bakın.
Sanal A/B sıkıştırması
Sanal A/B sıkıştırmasını desteklemek için snapuserd
vendor_ramdisk
kurulmalıdır. Cihaz, snapuserd
vendor_ramdisk
değişkenini yükleyen virtual_ab_ota/compression.mk
dosyasından miras almalıdır.
Önyükleme işlemindeki değişiklikler
Kurtarmaya veya Android'e önyükleme işlemi aşağıdaki istisna dışında değişmez:
- Ramdisk
build.prop
/second_stage_resources
taşınır, böylece ikinci aşamainit
önyüklemenin derleme zaman damgasını okuyabilir.
Kaynaklar genel ramdisk'ten vendor_boot
ramdisk'e taşındığından, genel ramdisk'i vendor_boot
ramdisk'e birleştirmenin sonucu değişmez.
e2fsck'i kullanılabilir hale getirme
Cihaz makefile dosyaları aşağıdakilerden miras alabilir:
aygıt sanal A/B'yi destekliyor ancak sıkıştırmayı desteklemiyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
.Cihaz sanal A/B sıkıştırmasını destekliyorsa
virtual_ab_ota/compression.mk
.
Ürün makefile dosyaları $ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
yükler. Çalışma zamanında, ilk aşama init
kökü /first_stage_ramdisk
olarak değiştirir ve ardından /system/bin/e2fsck
çalıştırır.
Seçenek 2a: Özel ve A/B kurtarma bölümü
A/B recovery
bölümlerine sahip cihazlar için bu seçeneği kullanın; yani cihazın bir recovery_a
ve recovery_b partition
vardır. Bu tür cihazlar, aşağıdaki yapılandırmaya sahip, kurtarma bölümünün güncellenebildiği A/B ve Sanal A/B cihazlarını içerir:
AB_OTA_PARTITIONS += recovery
vendor_boot
ramdiski, aşağıdakiler de dahil olmak üzere, ramdisk ve satıcı çekirdek modüllerinin satıcı bitlerini içerir:
Cihaza özel
fstab
dosyalarılib/modules
(satıcı çekirdek modüllerini içerir)
recovery
ramdiski tüm kurtarma kaynaklarını içerir. Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk
dosyasından devralınır .
KART değerlerinin ayarlanması
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
İkili dosyaları ve sembolik bağlantıları başlatın
recovery
ramdiski bir /init -> /system/bin/init
sembolik bağlantısı ve /system/bin/init
konumunda init_second_stage.recovery
içerebilir. Ancak, önyükleme ramdiski recovery
ramdiskinden sonra birleştirildiğinden, /init
sembolik bağlantısının üzerine yazılır. Cihaz kurtarma moduna geçtiğinde, ikinci aşama başlatmayı desteklemek için /system/bin/init
ikili dosyasına ihtiyaç vardır.
Cihaz recovery
önyüklendiğinde, recovery
+ vendor_boot
+ genel ramdisk'lerin içeriği aşağıdaki gibidir:
-
/init
(ramdisk'ten,init_first_stage
oluşturulmuş) -
/system/bin/init
(init_second_stage.recovery
dosyasından oluşturulan ve/init
dosyasından yürütülenrecovery
ramdiskinden)
Cihaz Android'e ön yükleme yaptığında vendor_boot
+ jenerik ramdisklerin içerikleri aşağıdaki gibidir:
-
/init
(init_first_stage
oluşturulan genel ramdisk'ten)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen tüm fstab
dosyalarını vendor_ramdisk
taşıyın. Örnek olarak bu değişikliğe bakın.
Modülleri yükleme
İsterseniz cihaza özel modülleri vendor_ramdisk
yükleyebilirsiniz (kurmanız gereken cihaza özel modülleriniz yoksa bu adımı atlayın). Init
kökü değiştirmez. Modüllerin vendor_ramdisk
çeşidi, vendor_ramdisk
köküne kurulur. vendor_ramdisk
modül yükleme örnekleri için bkz. Birinci aşama konsolu , Meta veri sağlama toplamları ve Sanal A/B sıkıştırması .
İlk aşama konsolu
Modüllerin vendor_ramdisk
varyantını kurmak için aşağıdakileri kullanın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
Bu, linker
, sh
ve toybox
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
adresine kurulmasını ve daha sonra vendor_ramdisk
altında /system/bin
dizinine kurulmasını sağlar.
İlk aşama konsolu için gereken modülleri (örneğin adbd) eklemek için 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
adresine yüklenmesini sağlar. vendor_boot
ramdisk'i kurtarma modunda yüklenmişse, modül recovery
modunda da kullanılabilir. vendor_boot
ramdisk'i kurtarma modunda yüklenmemişse, cihaz isteğe bağlı olarak adbd.recovery
de yükleyebilir.
Meta veri sağlama toplamları
İlk aşama montajı 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 olarak bu değişiklik listesine bakın.
Sanal A/B sıkıştırması
Sanal A/B sıkıştırmasını desteklemek için snapuserd
vendor_ramdisk
kurulmalıdır. Cihaz, snapuserd
vendor_ramdisk
değişkenini yükleyen virtual_ab_ota/compression.mk
dosyasından miras almalıdır.
Önyükleme işlemindeki değişiklikler
Android'e önyükleme yaparken önyükleme işlemi değişmez. vendor_boot
+ jenerik ramdiski, fstab
vendor_boot
yüklenmesi dışında mevcut önyükleme işlemine benzer. system/bin/recovery
mevcut olmadığından, first_stage_init
bunu normal bir önyükleme gibi ele alır.
Kurtarma moduna ö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ü yerine boot
görüntüsünden yüklenir. Kurtarma modu için önyükleme işlemi aşağıdaki gibidir.
Bootloader başlar ve ardından aşağıdakileri yapar:
- Kurtarma +
vendor_boot
+ genel ramdisk'i/
konumuna aktarır. (OEM, kurtarma ramdiskindeki çekirdek modülleriniBOARD_RECOVERY_KERNEL_MODULES
öğesine ekleyerek çoğaltırsa),vendor_boot
isteğe bağlıdır.) - Çekirdeği
boot
bölümünden çalıştırır.
- Kurtarma +
Çekirdek, ramdisk'i
/
ye bağlar ve ardından genel ramdisk'ten/init
çalıştırır.İlk aşama init başlar, ardından aşağıdakileri yapar:
-
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlar. - Satıcı çekirdek modüllerini
/lib/modules
konumundan yükler. -
DoFirstStageMount()
öğesini çağırır ancakIsRecoveryMode() == true
olduğundan montajı atlar. (Cihaz ramdisk'i serbest bırakmıyor (çünkü/
hala aynı) ancakSetInitAvbVersionInRecovery()
çağırıyor.) - İkinci aşama başlatmayı
recovery
ramdiskindeki/system/bin/init
konumundan başlatır.
-
e2fsck'i kullanılabilir hale getirme
Cihaz makefile dosyaları aşağıdakilerden miras alabilir:
aygıt sanal A/B'yi destekliyor ancak sıkıştırmayı desteklemiyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
.Cihaz sanal A/B sıkıştırmasını destekliyorsa
virtual_ab_ota/compression.mk
.
Ürün makefile dosyaları $ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
dosyasını yükler. Çalışma zamanında, ilk aşama init
/system/bin/e2fsck
yürütür.
Seçenek 2b: Ö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 aygıtta yuva son eki olmayan recovery
adlı bir bölüm vardır. Bu tür cihazlar şunları içerir:
- A/B olmayan cihazlar;
- Kurtarma bölümü güncellenemeyen A/B ve Sanal A/B cihazları. (Bu alışılmadık bir durum.)
vendor_boot
ramdiski, aşağıdakiler de dahil olmak üzere, ramdisk ve satıcı çekirdek modüllerinin satıcı bitlerini içerir:
- Cihaza özel
fstab
dosyaları -
lib/modules
(satıcı çekirdek modüllerini içerir)
recovery
görüntüsü bağımsız olmalıdır. Aşağıdakiler dahil, kurtarma modunu başlatmak için gerekli tüm kaynakları içermelidir:
- Çekirdek görüntüsü
- DTBO görüntüsü
-
lib/modules
çekirdek modülleri - Sembolik bağlantı olarak birinci aşama başlatma
/init -> /system/bin/init
- İkinci aşama başlatma ikili
/system/bin/init
- Cihaza özel
fstab
dosyaları -
recovery
ikili dosyası vb. dahil diğer tüm kurtarma kaynakları. - vesaire.
Bu tür cihazlarda ürün yapılandırması generic_ramdisk.mk
dosyasından devralınır .
KART değerlerinin ayarlanması
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
İkili dosyaları ve sembolik bağlantıları başlatın
recovery
ramdiski bir /init -> /system/bin/init
sembolik bağlantısı ve /system/bin/init
konumunda init_second_stage.recovery
içermelidir. Cihaz kurtarma moduna önyüklendiğinde, hem birinci aşamayı hem de ikinci aşama başlatmayı desteklemek için /system/bin/init
ikili dosyasına ihtiyaç vardır.
Cihaz recovery
işlemine geçtiğinde recovery
ramdisklerinin içeriği aşağıdaki gibidir:
-
/init -> /system/bin/init
(recovery
ramdiskinden) -
/system/bin/init
(init_second_stage.recovery
dosyasından oluşturulan ve/init
dosyasından yürütülenrecovery
ramdiskinden)
Cihaz Android'e ön yükleme yaptığında vendor_boot
+ jenerik ramdisklerin içerikleri aşağıdaki gibidir:
-
/init
(ramdisk'ten,init_first_stage
oluşturulmuş)
fstab dosyalarını taşıma
Genel ramdisk'e yüklenen tüm fstab
dosyalarını vendor_ramdisk
ve recovery
ramdisk'ine taşıyın. Örnek olarak bu değişikliğe bakın.
Modülleri yükleme
İstenirse, vendor_ramdisk
ve recovery
ramdisk'ine cihaza özel modüller yükleyebilirsiniz (kurmanız gereken cihaza özel modülleriniz yoksa bu adımı atlayın). init
kökü değiştirmez. Modüllerin vendor_ramdisk
çeşidi, vendor_ramdisk
köküne kurulur. Modüllerin recovery
çeşidi, recovery
ramdiskinin köküne yüklenir. vendor_ramdisk
ve recovery
ramdisk'ine modül yükleme örnekleri için, bkz. İlk aşama konsolu ve Meta Veri sağlama toplamları .
İlk aşama konsolu
Modüllerin vendor_ramdisk
varyantını kurmak için aşağıdakileri kullanın:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
Bu, linker
, sh
ve toybox
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
adresine kurulmasını ve daha sonra vendor_ramdisk
altında /system/bin
dizinine kurulmasını sağlar.
İlk aşama konsolu için gereken modülleri (örneğin adbd) eklemek için 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
adresine yüklenmesini sağlar.
Modüllerin recovery
sürümünü yüklemek için vendor_ramdisk
recovery
ile değiştirin:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
Meta veri sağlama toplamları
İlk aşama montajı 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 \
Kurtarmanın ilk aşaması sırasında meta veri sağlama toplamlarını desteklemek için bu modüllerin kurtarma varyantını etkinleştirin ve bunları da yükleyin.
Önyükleme işlemindeki değişiklikler
Android'e önyükleme yaparken önyükleme işlemi değişmez. vendor_boot
+ jenerik ramdiski, fstab
vendor_boot
yüklenmesi dışında mevcut önyükleme işlemine benzer. system/bin/recovery
mevcut olmadığından, first_stage_init
bunu normal bir önyükleme gibi ele alır.
Kurtarma moduna önyükleme yaparken önyükleme 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 modu için önyükleme işlemi aşağıdaki gibidir.
Bootloader başlar ve ardından aşağıdakileri yapar:
- Kurtarma ramdisk'ini
/
konumuna iter. - Çekirdeği
recovery
bölümünden çalıştırır.
- Kurtarma ramdisk'ini
Çekirdek, ramdisk'i
/
dizinine bağlar ve ardındanrecovery
ramdiskinden/system/bin/init
bir sembolik bağlantı olan/init
komutunu çalıştırır.İlk aşama init başlar, ardından aşağıdakileri yapar:
-
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlar. - Satıcı çekirdek modüllerini
/lib/modules
konumundan yükler. -
DoFirstStageMount()
öğesini çağırır ancakIsRecoveryMode() == true
olduğundan montajı atlar. (Cihaz ramdisk'i serbest bırakmıyor (çünkü/
hala aynı) ancakSetInitAvbVersionInRecovery()
çağırıyor.) - İkinci aşama başlatmayı
recovery
ramdiskindeki/system/bin/init
konumundan başlatır.
-
Önyükleme görüntüsü zaman damgaları
Aşağıdaki kod, örnek bir boot
görüntüsü 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 yapının zaman damgası bilgilerini içerir.Çalışma zamanında, ilk aşama
init
ramdisk'i serbest bırakmadan önce dosyaları ramdisk'tentmpfs
kopyalar , böylece ikinci aşamainit
boot
görüntüsü zaman damgası özelliklerini ayarlamak için bu dosyayı okuyabilir .