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
recovery
bölümü kullanmayın. Tüm kurtarma bitleri, genel ramdisktenvendor_boot
ramdiskine taşınır.recovery
bölümünü kullanın.recovery
ramdisk bağımsız olduğundanrecovery
ramdisk'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_boot
resmi eklendi- Başlık sürümü V4
- Genel ramdisk görüntüsü
Genel
boot
resim- 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.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
resimlerinde bulunur.
- 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 Vendor Boot Partitions bölümüne bakın)vendor_boot
header- Cihaza özgü
cmdline
(BOARD_KERNEL_CMDLINE
)
- Cihaza özgü
vendor_boot
ramdisk görüntüsülib/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 görüntüleri bölümüne bakın. Örneğin:
cmdline
,boot
vevendor_boot
cmdline
ile birleştirilmiyor.- Gerekirse başlık, kurtarma DTBO'sunu belirtir.
- A/B kurtarma bölümü için içerikler birleştirilebilir veya
boot
vevendor_boot
'dan çıkarılabilir. Örneğin: cmdline
,boot
vevendor_boot
cmdline
ile birleştirilir.- DTBO,
vendor_boot
üstbilgisinden çıkarılabilir.
- Gerekirse kurtarma için cihaza özgü
recovery
ramdisk 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
init
içermelidir. - A/B kurtarma bölümünde, kurtarma ramdiski genel ve
vendor_boot
ramdiskine eklenir. Bu nedenle bağımsız olması gerekmez. Örneğin: lib/modules
,vendor_boot
ramdisk'teki çekirdek modüllerinin yanı sıra kurtarma modunun başlatılması için gereken ek çekirdek modüllerini içerebilir./init
konumundaki sembolik bağlantı mevcut olabilir ancak önyükleme görüntüsündeki birinci aşama/init
ikilisi 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.
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
props- 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şkentrue
olarak ayarlanırsaBOARD_PREBUILT_BOOTIMAGE
değ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ınboot
resmi olarakrecovery
resmini kullanıp kullanmadığını gösterir. GKI kullanılırken bu değişken boş olur ve kurtarma kaynaklarıvendor_boot
konumuna 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_boot
için ramdisk kurtarma kaynaklarının 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
ise:Ayarlanır. 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
ise:Ayarlanır. 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 cihazlar, kurtarma görüntüsünün bağımsız kalması için bu değişkenifalse
olarak 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ş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
oluşturulup oluşturulmayacağını kontrol eder ve boyutu ayarlar. Ayarlandığında, genel ramdiskboot.img
yerineinit_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_BOOT
değ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_BOOT
boş olarak ayarlanabilir. Bu durumda yeni yapılandırmalar kullanılıyor demektir. 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 Seçenek 1'dir.recovery
bö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_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 kurulumu 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 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_arm64
derleme 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_stage
kullanılarak oluşturulan genel ramdisk'ten)/system/bin/init
(vendor_ramdisk
tarafından,init_second_stage.recovery
kullanı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_ramdisk
varyantını kullanın. Bu modül,init
kökünü/first_stage_ramdisk
olarak değiştirdikten sonra ancakinit
kökünü/system
olarak 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ünrecovery
varyantını kullanın. Bu modül,init
, kökü/first_stage_ramdisk
olarak 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.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'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
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
'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_stage
kullanılarak oluşturulan ramdisk'ten)/system/bin/init
(init_second_stage.recovery
kaynağından oluşturulan ve/init
konumundan yürütülenrecovery
ramdisk'ten)
Cihaz Android'e önyüklendiğinde vendor_boot
+ genel ramdisklerin içeriği aşağıdaki gibidir:
/init
(init_first_stage
kullanı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_boot
isteğe bağlıdır.) - Çekirdeği
boot
bölümünden çalıştırır.
- Kurtarma +
Çekirdek, ramdisk'i
/
konumuna bağlar ve ardından genel ramdisk'ten/init
komutunu yürütür.İlk aşama başlatılır ve ardından aşağıdakiler yapılır:
IsRecoveryMode() == true
veForceNormalBoot() == false
değerlerini ayarlar./lib/modules
konumundan tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapılıyor ancakIsRecoveryMode() == true
nedeniyle bağlama işlemi atlanıyor. (Cihaz, ramdisk'i boşaltmaz (çünkü/
hâlâ aynıdır) ancakSetInitAvbVersionInRecovery()
'yi çağırır.)recovery
ramdisk'inden/system/bin/init
ile 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.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'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
fstab
dosyaları 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/modules
bö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
fstab
dosyaları recovery
ikili 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
(recovery
ramdisk'ten)/system/bin/init
(init_second_stage.recovery
kaynağından oluşturulan ve/init
konumundan yürütülenrecovery
ramdisk'ten)
Cihaz Android'e önyüklendiğinde vendor_boot
+ genel ramdisklerin içeriği aşağıdaki gibidir:
/init
(init_first_stage
kullanı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
recovery
bölümünden çalıştırır.
- Kurtarma ramdiskini
Çekirdek, ramdisk'i
/
konumuna bağlar ve ardındanrecovery
ramdisk'indeki/system/bin/init
konumuna sembolik bağlantı olan/init
dosyasını çalıştırır.İlk aşama başlatılır ve ardından aşağıdakiler yapılır:
IsRecoveryMode() == true
veForceNormalBoot() == false
değerlerini ayarlar./lib/modules
konumundan tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapılıyor ancakIsRecoveryMode() == true
nedeniyle bağlama işlemi atlanıyor. (Cihaz, ramdisk'i boşaltmaz (çünkü/
hâlâ aynıdır) ancakSetInitAvbVersionInRecovery()
'yi çağırır.)recovery
ramdisk'inden/system/bin/init
ile 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.prop
dosyası 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
,boot
görüntü zaman damgası özelliklerini ayarlamak için bu dosyayı okuyabilir.