Android 12'de, genel boot
görüntüsü
Genel Kernel Görüntüsü (GKI),
genel ramdisk ve GKI çekirdeğini içerir.
Android 13 ile kullanıma sunulan cihazlarda,
ramdisk, boot
resminden kaldırılıp ayrı bir init_boot
içine yerleştirilir
görüntüsüdür. Bu değişiklik, boot
resmini yalnızca
GKI çekirdeği.
Android 12'yi kullanmaya devam eden cihazları yükseltmek için
daha eski çekirdek sürümlerinde, genel RAM
yeni init_boot
resmi gerekmez.
Genel bir ramdisk oluşturmak için tedarikçiye özgü kaynakları ramdisk'in dışına taşıyın
Böylece genel ramdisk yalnızca ilk aşama init
ve bir özellik içerir
zaman damgası bilgilerini içeren dosyadır.
Şu cihazlarda:
Özel bir
recovery
bölümü kullanmayın, tüm kurtarma bitlerivendor_boot
ramdisk'e genel bir ramdisk.Özel bir
recovery
bölümü kullanın,recovery
RAM diskinde değişiklik yapmayınrecovery
RAM diski bağımsız olduğundan gereklidir.
Mimari
Aşağıdaki şemalarda, Android çalıştıran cihazların mimarisi gösterilmektedir
12 ve üzeri.
Android 13 ile kullanıma sunulan cihazlarda yeni bir
Genel RAM'i içeren init_boot
resim.
Android 12'den Android'e geçen cihazlar
13 platformdakilerle aynı mimariyi
Android 12.
Android 13 ile kullanıma sunun, özel bir kurtarma işlemi gerekmez
Şekil 1. GKI ile kullanıma sunulan veya Android 13'e yükseltilen cihazlar (özel bir kurtarma seçeneği yoktur).
Android 13 ile lansman, özel ve A/B kurtarma (özel ramdisk)
Şekil 2. GKI, özel ve A/B kurtarma işleviyle Android 13'ü kullanıma sunulan veya Android 13'e yükseltilen cihazlar.
Cihazda recovery_a
ve recovery_b
bölümleri varsa bu resme bakın.
Android 13 ile lansman, özel ve A/B dışı kurtarma (özel ramdisk)
Şekil 3. GKI, özel ve A/B dışı kurtarma özelliği ile kullanıma sunulan veya Android 13'e yükseltilen cihazlar.
Cihazın recovery
adlı bir bölümü varsa ve bu bölüm
alan soneki.
Android 12'yi başlatma veya yükseltme (özel bir kurtarma işlemi gerekmez)
4.Şekil GKI ile kullanıma sunulan veya Android 12'ye yükseltilen cihazlar (özel bir kurtarma seçeneği yoktur).
Android 12'yi başlatın veya yükseltin, özel ve A/B kurtarma işlemi (özel ramdisk)
5. Şekil. GKI, özel ve A/B kurtarma işleviyle Android 12'ye yükseltilen veya yükseltilen cihazlar.
Cihazda 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)
6. Şekil. GKI, özel ve A/B dışı kurtarma özelliği ile kullanıma sunulan veya Android 12'ye yükseltilen cihazlar.
Cihazın recovery
adlı bir bölümü varsa ve bu bölüm
alan soneki.
Android 12'ye yükseltme, önyükleme olarak kurtarma (ramdisk olarak kurtarma)
7.Şekil Android 12'ye yükseltilen (GKI olmayan, başlatma olarak kurtarma) cihazlar.
Android 12'ye yükseltme, özel kurtarma (özel ramdisk)
8. Şekil. Android 12'ye geçen (GKI olmayan, özel kurtarma) cihazlar.
Başlatma görüntüsü içerikleri
Android başlatma görüntüleri şunları içerir.
Android 13 ile kullanıma sunulacak cihazlar için
init_boot
resim eklendi- Başlık sürümü V4
- Genel ramdisk resmi
Genel
boot
resim- Başlık sürümü V3 veya
Sürüm 4
- GKI boot.img sertifikası için
boot_signature
(yalnızca sürüm 4). İlgili içeriği oluşturmak için kullanılan sertifikalı GKIboot.img
, doğrulanmış başlatma için imzalanmamış. OEM'ler bunu yapmaya Önceden oluşturulmuşboot.img
öğesini cihaza özel bir cihazla imzalayın AVB tuşuna basın. - Genel
cmdline
(GENERIC_KERNEL_CMDLINE
) - GKI çekirdeği
- GKI boot.img sertifikası için
- Genel ramdisk resmi
- Yalnızca Android 12'deki
boot
resme dahil ve öncesi
- Yalnızca Android 12'deki
- Başlık sürümü V3 veya
Sürüm 4
vendor_boot
görüntüsü (ayrıntılar için Tedarikçi Firma Başlatma'ya bakın) Bölümler)vendor_boot
üst bilgisi- Cihaza özel
cmdline
(BOARD_KERNEL_CMDLINE
)
- Cihaza özel
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 özel
cmdline
- A/B olmayan kurtarma bölümü için üstbilginin içeriği bağımsız; bkz. Kurtarma Görüntüleri. Örnek:
cmdline
,boot
vevendor_boot
cmdline
ile birleştirilmemiş.- Başlıkta, gerekirse kurtarma DTBO'su belirtilir.
- A/B kurtarma bölümü için içerikler birleştirilebilir veya tahmin edilebilir
boot
vevendor_boot
. Örnek: cmdline
,boot
vevendor_boot
cmdline
ile ilişkilendirildi.- DTBO,
vendor_boot
başlığından anlaşılabilir.
- Gerekirse kurtarma için cihaza özel
recovery
ramdisk resmi- Kurtarma kaynakları
- A/B olmayan kurtarma bölümü için RAM disk içeriği aşağıdaki gibi olmalıdır: bağımsız; bkz. Kurtarma Görüntüleri. Örnek:
lib/modules
, başlatma için gereken tüm çekirdek modüllerini içermelidir kurtarma modu- Kurtarma RAM'i
init
içermelidir. - A/B kurtarma bölümü için kurtarma RAM diski,
genel ve
vendor_boot
ramdisk olduğundan bağımsız olarak yürütülür. Örnek: lib/modules
, yalnızca şunun için gereken ek çekirdek modüllerini içerebilir:vendor_boot
RAM diskindeki çekirdek modüllerinin yanı sıra başlatma kurtarma modu./init
konumundaki sembolik bağlantı mevcut olabilir, ancak başlatma görüntüsündeki ilk aşama/init
ikili programı.
- Başlık sürümü V2
Genel ramdisk resim içerikleri
Genel ramdisk aşağıdaki bileşenleri içerir.
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
eşyalar- Ekleme noktaları için boş dizinler:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
metadata/
first_stage_ramdisk/
- Ekleme noktaları için kopyalanan boş dizinler:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
- Ekleme noktaları için kopyalanan boş dizinler:
Başlatma görüntüsü entegrasyonu
Derleme işaretleri; init_boot
, boot
, recovery
ve vendor_boot
özelliklerini kontrol eder
nasıl oluşturulduğunu göstereceğim. Boole pano değişkeninin değeri dize olmalıdır
true
veya boş (varsayılan) olmalıdır.
TARGET_NO_KERNEL
Bu değişken, derlemenin önceden oluşturulmuş bir başlatma kullanıp kullanmadığını gösterir görüntüsüdür. Bu değişkentrue
olarak ayarlanırsaBOARD_PREBUILT_BOOTIMAGE
değerini ayarlayın konumuna göre (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
)BOARD_USES_RECOVERY_AS_BOOT
Bu değişken, cihazınrecovery
resmi,boot
resmi olarak kullanılır. GKI kullanılırken bu değişken boş olmalı ve kurtarma kaynaklarıvendor_boot
hedefine taşınmalıdır.BOARD_USES_GENERIC_KERNEL_IMAGE
Bu değişken, yönetim kurulunun GKI. Bu değişken sysprops veyaPRODUCT_PACKAGES
Bu, Jamboard 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ıvendor_boot
için oluşturulmuştur.true
olarak ayarlandığında kurtarma kaynakları yalnızcavendor-ramdisk/
olarak oluşturulurrecovery/root/
için tasarlanmamıştır.Boş olduğunda kurtarma kaynakları yalnızca
recovery/root/
için oluşturulur ve değildirvendor-ramdisk/
için tasarlandı.
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
Bu değişken, GSI'nın AVB anahtarlarıvendor_boot
kalitesine göre tasarlanmıştır.BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
isetrue
olarak ayarlandığında:Ayarlandığında, GSI AVB anahtarları şu şekilde tasarlanmıştır:
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
Ayarlanmazsa GSI AVB anahtarları şuna benzer şekilde tasarlanmıştır:
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
Boş olduğunda,
BOARD_RECOVERY_AS_ROOT
ise:Ayarlandığında, GSI AVB anahtarları şu şekilde tasarlanmıştır:
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
Ayarlanmazsa GSI AVB anahtarları şuna benzer şekilde tasarlanmıştır:
$ANDROID_PRODUCT_OUT/ramdisk/avb
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
Bu değişken,recovery
görüntüsü, çekirdek içeriyor veya içermiyor. Android ile kullanıma sunulan cihazlar 12 ve A/Brecovery
bölümü kullanıldığında bu ayar seçilmelidir değişkeninitrue
olarak ayarlayın. Android 12 ile kullanıma sunulan cihazlar A/B dışını kullanmak, kurtarma görüntüsünü korumak için bu değişkenifalse
olarak ayarlamalıdır. bağımsız olması gerekir.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
Bu değişken,$OUT/boot*.img
, hedef dosyalar altındakiIMAGES/
klasörüne kopyalanır.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şturulur ve boyutu ayarlar. Ayarlandığında, genel RAM parametresi,boot.img
yerineinit_boot.img
öğesine eklenir ve Şunun içinBOARD_AVB_INIT_BOOT*
değişken belirlenecek: chained vbmeta.
İzin verilen kombinasyonlar
Bileşen veya değişken | Kurtarma bölümü olmadan cihazı yeni sürüme geçirin | Kurtarma bölümüyle cihazı yeni sürüme geçir | Cihazı, kurtarma bölümü olmadan başlat | Cihazı A/B kurtarma bölümüyle başlat | Cihazı A/B olmayan kurtarma bölümüyle başlatın | aosp_arm64 |
---|---|---|---|---|---|---|
boot içerir |
evet | evet | evet | evet | evet | evet |
init_boot içerir (Android 13) |
hayır | hayır | evet | evet | evet | evet |
vendor_boot içerir |
isteğe bağlı | isteğe bağlı | evet | evet | evet | hayır |
recovery içerir |
hayır | evet | hayır | evet | evet | hayır |
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 bir recovery
bölümü olan cihazlar ayarlanabilir
PRODUCT_BUILD_RECOVERY_IMAGE
- true
veya boş. Bu cihazlarda
BOARD_RECOVERYIMAGE_PARTITION_SIZE
ayarlandı ve recovery
görüntüsü oluşturuldu.
Başlatma için zincirli vbmeta'yi etkinleştir
boot
ve init_boot
görüntüleri için zincirli ddt meta desteği etkinleştirilmelidir. Belirtin:
şu:
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, bkz. değiştirin.
Kök olarak sistem
GKI kullanan cihazlarda kök olarak sistem desteklenmez. Şu tarihte:
bu tür cihazlarda BOARD_BUILD_SYSTEM_ROOT_IMAGE
boş olmalıdır. Kök olarak sistem
ve dinamik bölümlendirme kullanan cihazlar için de desteklenmemektedir.
Ürün yapılandırmaları
Genel RAM'i kullanan cihazlar,
diske yüklenmesine izin verilmez. Bunu yapmak için
device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
generic_ramdisk.mk
dosyası, diğer oluşturma dosyalarının yanlışlıkla gönderilmesini de önler
RAM'e başka dosyalar yükleyerek (bu tür dosyaları vendor_ramdisk
).
Cihazları ayarla
Kurulum talimatları, Android'le başlatılan cihazlar arasında farklılık gösterir 13, Android 12'ye yükseltme ve Android 12 ile kullanıma sunma. Android 13'teki ayarlar, Android 12'dekine benzer şekilde tasarlanmıştır.
Android 12'ye Geçirilen Cihazlar:
BOARD_USES_RECOVERY_AS_BOOT
değeri korunabilir. Bunu yaparlarsa eski yapılandırmaları kullandıklarını ve yeni derleme değişkenlerinin boş bırakılması gerektiğini unutmayın. Böyle bir durumda cihazlar:BOARD_USES_RECOVERY_AS_BOOT
alanı boş olarak ayarlanabilir. Bunu yaparlarsa yeni yapılandırmalar var. Bu tür cihazlar:Mimari gösterildiği gibi, özel bir
recovery
bölümü kullanmayın. Şekil 1; cihaz kurulumu seçeneği ise Seçenek 1.Mimari aşağıdaki gibidir. Özel bir
recovery
bölümü kullanın. Şekil 2a veya Şekil 2b ve cihaz kurulumu seçenek, Seçenek 2a veya Seçenek 2b'dir.
Android 12 ile kullanıma sunulan cihazlar ayarlanmalıdır Boşaltmak ve yeni yapılandırmaları kullanmak için
BOARD_USES_RECOVERY_AS_BOOT
. Böyle bir durumda cihazlar:Mimari aşağıdaki gibi olduğundan özel bir
recovery
bölümü kullanmayın. Şekil 1 ve cihaz kurulumu seçeneği 1. Seçenek'tir.Mimari aşağıdaki gibidir. Özel bir
recovery
bölümü kullanın. Şekil 2a veya Şekil 2b ve cihaz kurulumu seçenek, Seçenek 2a veya Seçenek 2b'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
1. Seçenek: Özel kurtarma bölümü yok
recovery
bölümü olmayan cihazlar,boot
boot
bölüm. vendor_boot
RAM'i tüm kurtarma kaynaklarını içerir,
lib/modules
(tedarikçi çekirdek modülleriyle) dahil. Bu tür cihazlarda
ürün yapılandırması şu kaynaktan devralır:
generic_ramdisk.mk
.
BOARD (BOARD) değerlerini ayarlayın
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 programlar ve sembolik bağlantılar
vendor_boot
RAM'i, /init
ile /system/bin/init
arasında sembolik bağlantı içerebilir.
ve /system/bin/init
itibarıyla init_second_stage.recovery
. Ancak,
genel ramdisk, vendor_boot
ramdisk'inden sonra birleştirilir, /init
sembolik bağlantının üzerine yazılır. Cihaz, kurtarma işlemini başlattığında
İkinci aşamanın başlatılmasını desteklemek için /system/bin/init
ikili programı gerekiyor. İçindekiler
vendor_boot
+ genel RAM'ler aşağıdaki gibidir:
/init
(genel ramdisk'ten,init_first_stage
sitesinden oluşturuldu)/system/bin/init
(vendor_ramdisk
tutarından, şuradan geliştirildi:init_second_stage.recovery
)
Fstab dosyalarını taşıma
Genel RAM'e yüklenen fstab
dosyalarını şu klasöre taşıyın:
vendor_ramdisk
. Örneğin, bkz.
değiştirin.
Modülleri yükleme
vendor_ramdisk
ürününe cihaza özel modüller yükleyebilirsiniz (atla
yoksa bu adımı etkinleştirmeniz gerekir.
Modül yüklendiğinde modülün
vendor_ramdisk
varyantını kullanın/first_stage_ramdisk
. Bu modülinit
tarihinden sonra kullanılabilir olacaktır kökü/first_stage_ramdisk
olarak değiştirir, ancakinit
kökü/system
. Örnekler için Meta veri sağlamaları Sanal A/B sıkıştırması.Modül
/
ürününe yüklendiğinde modülünrecovery
varyantını kullanın. Bu modül,init
tarafından kök olarak anahtarlamadan önce kullanıma sunulacaktır./first_stage_ramdisk
. Modülleri/
ürününe yüklemeyle ilgili ayrıntılar için bkz. Öncelik sahne konsolunuza gidin.
İlk aşama konsolu
İlk aşama konsolu, init
kök dizini şuna geçirmeden önce başladığından:
/first_stage_ramdisk
, modüllerin recovery
varyantını yüklemeniz gerekiyor.
Varsayılan olarak her iki modül varyantı da şuraya yüklenir:
build/make/target/product/base_vendor.mk
. Bu durumda, cihaz oluşturma dosyası
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
, ardından
vendor_ramdisk
altında /system/bin
.
İlk aşama konsolu (ör. adbd) için gereken modülleri eklemek üzere takip ediliyor.
PRODUCT_PACKAGES += adbd.recovery
Bu işlem, belirtilen modüllerin
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
ve ardından
vendor_ramdisk
altında /system/bin
.
Meta veri sağlamaları
Meta verileri desteklemek için
sağlamalar
ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır.
aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örneğin, bkz. değişiklik listesi.
Sanal A/B sıkıştırması
Sanal A/B sıkıştırmasının desteklenmesi için snapuserd
,
vendor_ramdisk
. Cihaz,
virtual_ab_ota/compression.mk
(snapuserd
) vendor_ramdisk
varyantını yükler.
Başlatma işlemindeki değişiklikler
Kurtarma veya Android'i başlatma işlemi şu istisna:
build.prop
Ramdisk'i/second_stage_resources
ile ikinci etapta ilerlerinit
, başlatmanın derleme zaman damgasını okuyabilir.
Kaynaklar genel RAM'den vendor_boot
ramdisk'e taşındığı için sonuçta
genel ramdisk'in vendor_boot
ramdisk'e birleştirildiğinde değişiklik değişmez.
e2fsck'yi kullanılabilir yap
Cihaz oluşturma dosyaları şunlardan devralabilir:
Cihaz sanal makineleri destekliyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
A/B testi yapabilirsiniz.Cihaz sanal A/B'yi destekliyorsa
virtual_ab_ota/compression.mk
sağlayabilirsiniz.
Ürün oluşturma dosyaları yüklenir
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
Kuyruklu a işareti
çalışma zamanından önce, init
ilk aşamanın kökü /first_stage_ramdisk
olarak değiştirir, ardından
/system/bin/e2fsck
öğesini yürütür.
2a seçeneği: Özel ve A/B kurtarma bölümü
A/B recovery
bölümleri olan cihazlar için bu seçeneği kullanın; yani
cihazda recovery_a
ve recovery_b partition
var. Bu tür cihazlar şunları içerir:
Kurtarma bölümünün güncellenebileceği A/B ve Sanal A/B cihazları,
şu yapılandırma:
AB_OTA_PARTITIONS += recovery
vendor_boot
RAM'i, ramdisk'in ve tedarikçi firmanın tedarikçi bitlerini içerir.
şunları içerir:
Cihaza özel
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ı şu kaynaktan devralır:
generic_ramdisk.mk
.
BOARD (BOARD) değerlerini ayarlayın
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 programlar ve sembolik bağlantılar
recovery
RAM diski bir /init -> /system/bin/init
sembol bağlantısı içerebilir ve
init_second_stage.recovery
, /system/bin/init
. Ancak, başlatma sırasında
ramdisk, recovery
ramdiskten sonra birleştirilir, /init
sembolik bağlantısı
üzerine yazılır. Cihaz, kurtarma modunda açıldığında /system/bin/init
ikili program, ikinci aşamanın başlatılmasını desteklemek için gereklidir.
Cihaz recovery
programına yüklendiğinde, recovery
+
vendor_boot
+ genel RAM'ler şunlardır:
/init
(ramdisk'ten,init_first_stage
'dan üretilmiş)/system/bin/init
(recovery
ramdiskten, yapıminit_second_stage.recovery
ve/init
tarihinden yürütüldü)
Cihaz Android'e başladığında vendor_boot
+ genel içerikleri
ramdisk'ler şunlardır:
/init
(genel ramdisk'ten,init_first_stage
sitesinden oluşturuldu)
Fstab dosyalarını taşıma
Genel RAM'e yüklenen fstab
dosyalarını
vendor_ramdisk
. Örneğin, bkz.
değiştirin.
Modülleri yükleme
İsteğe bağlı olarak, vendor_ramdisk
ürününe cihaza özel modüller yükleyebilirsiniz (
yoksa bu adımı etkinleştirmeniz gerekir. Init
.
kökü değiştirmez. Modüllerin vendor_ramdisk
varyantı
vendor_ramdisk
kökü. Modülleri
vendor_ramdisk
, bkz. İlk aşama konsolu, Meta veri
sağlamaları ve Sanal A/B
uygulayı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
, ardından
vendor_ramdisk
altında /system/bin
.
İlk aşama konsol için gerekli modülleri (ör. adbd) eklemek üzere şunları etkinleştirin:
İlgili yamaları yükleyerek bu modüllerin vendor_ramdisk
varyantını
AOSP'yi seçin, daha sonra aşağıdakileri kullanın,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Bu işlem, belirtilen modüllerin
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
vendor_boot
ramdisk
kurtarma modunda yüklendiğinde, modül recovery
dilinde de kullanılabilir. Öğe
vendor_boot
RAM diski kurtarma modunda yüklenmedi, cihaz isteğe bağlı olarak bunu yapabilir
adbd.recovery
uygulamasını da yükleyebilirsiniz.
Meta veri sağlamaları
Meta verileri desteklemek için
sağlamalar
ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır.
aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Örneğin, bkz. değişiklik listesi.
Sanal A/B sıkıştırması
Sanal A/B sıkıştırmasının desteklenmesi için snapuserd
,
vendor_ramdisk
. Cihaz,
virtual_ab_ota/compression.mk
(snapuserd
) vendor_ramdisk
varyantını yükler.
Başlatma işlemindeki değişiklikler
Android cihaz başlatılırken başlatma işlemi değişmez. vendor_boot
+
genel ramdisk, mevcut başlatma işlemine benzer, ancak fstab
vendor_boot
tarihinden itibaren yüklenir. system/bin/recovery
var olmadığı için
first_stage_init
bunu normal bir başlatma gibi işler.
Kurtarma modundayken başlatma 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 başlatma işlemi aşağıdaki gibidir.
Bootloader başlar ve ardından şunları yapar:
- Kurtarma işlemini +
vendor_boot
+ genel RAM'i/
hedefine aktarır. (OEM çekirdek modüllerini, kurtarma karma dosyalarındaki çekirdek modülleriniBOARD_RECOVERY_KERNEL_MODULES
),vendor_boot
isteğe bağlıdır.) boot
bölümünden çekirdeği çalıştırır.
- Kurtarma işlemini +
Çekirdek, ramdisk'i
/
konumuna bağlar, ardından genel ramdisk'ten/init
işlemini yürütür.İlk aşama başlatma, ardından şunları yapar:
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlarını yapar./lib/modules
kaynağından tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapıyor ancak ekleme işlemini atlıyor çünküIsRecoveryMode() == true
. (Cihaz ramdisk'i yer açmaz (çünkü/
hâlâ aynı), ancakSetInitAvbVersionInRecovery()
çağrısı yapıyor.)- İkinci aşama başlatma işlemini
/system/bin/init
konumundanrecovery
RAM'den başlatır.
e2fsck'yi kullanılabilir yap
Cihaz oluşturma dosyaları şunlardan devralabilir:
Cihaz sanal makineleri destekliyorsa
virtual_ab_ota/launch_with_vendor_ramdisk.mk
A/B testi yapabilirsiniz.Cihaz sanal A/B'yi destekliyorsa
virtual_ab_ota/compression.mk
sağlayabilirsiniz.
Ürün oluşturma dosyaları yüklenir
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
Kuyruklu a işareti
çalışma zamanından sonra init
, /system/bin/e2fsck
işlemini yürütür.
2b. Seçenek: Ö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
cihazda, alan son eki olmayan recovery
adlı bir bölüm var. Bu tür cihazlar
şunlardır:
- A/B olmayan cihazlar;
- Kurtarma bölümü olmayan A/B ve Sanal A/B cihazları güncellenebilir. (Bu olağan dışıdır.)
vendor_boot
RAM'i, ramdisk'in ve tedarikçi firmanın tedarikçi bitlerini içerir.
şunları içerir:
- Cihaza özel
fstab
dosyaları lib/modules
(tedarikçi çekirdek modüllerini içerir)
recovery
görseli bağımsız olmalıdır. Şunu içermelidir:
Aşağıdakiler dahil olmak üzere kurtarma modunu başlatmak için gereken tüm kaynaklar:
- Çekirdek görüntüsü
- DTBO görseli
lib/modules
çekirdek modülleri/init -> /system/bin/init
sembolik bağlantı olarak ilk aşama başlatma- İkinci aşama başlatma ikilisi
/system/bin/init
- Cihaza özel
fstab
dosyaları recovery
ikili programı dahil diğer tüm kurtarma kaynakları
Bu tür cihazlarda ürün yapılandırması devralır
başlangıç fiyatı: generic_ramdisk.mk
.
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
İkili programlar ve sembolik bağlantılar
recovery
RAM'i bir /init -> /system/bin/init
sembol bağlantısı içermelidir
init_second_stage.recovery
, /system/bin/init
. Cihaz başlatıldığında
geri yükleme modunda, ilk olarak her ikisini de desteklemek için /system/bin/init
ikili programı gerekir
ve ikinci aşamanın başlatılmasıyla ilgilidir.
Cihaz recovery
çalıştırıldığında, recovery
RAM'lerinin içeriği
şu şekildedir:
/init -> /system/bin/init
(recovery
ramdiskten)/system/bin/init
(recovery
ramdiskten, yapıminit_second_stage.recovery
ve/init
tarihinden yürütüldü)
Cihaz Android'e başladığında vendor_boot
+ genel içerikleri
ramdisk'ler şunlardır:
/init
(ramdisk'ten,init_first_stage
'dan üretilmiş)
Fstab dosyalarını taşıma
Genel RAM'e yüklenen fstab
dosyalarını
vendor_ramdisk
ve recovery
RAM diski. Örneğin, bkz.
değiştirin.
Modülleri yükleme
Cihaza özel modülleri vendor_ramdisk
ve
recovery
RAM (atla)
yoksa bu adımı etkinleştirmeniz gerekir. init
.
kökü değiştirmez. Modüllerin vendor_ramdisk
varyantı
vendor_ramdisk
kökü. Modüllerin recovery
varyantı
recovery
ramdisk'in kökü. Modülleri
vendor_ramdisk
ve recovery
RAM diski, se
İlk aşama konsolu ve Meta veriler
sağlamaları gibi bir değer ekleyin.
İ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
, ardından
vendor_ramdisk
altında /system/bin
.
İlk aşama konsol için gerekli modülleri (ör. adbd) eklemek üzere şunları etkinleştirin:
İlgili yamaları yükleyerek bu modüllerin vendor_ramdisk
varyantını
AOSP'yi seçin, daha sonra aşağıdakileri kullanın,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Bu işlem, belirtilen modüllerin
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
Modüllerin recovery
varyantını yüklemek için vendor_ramdisk
öğesini şununla değiştirin:
recovery
:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
Meta veri sağlamaları
Meta verileri desteklemek için
sağlamalar
ilk aşama montajı sırasında, GKI'yı desteklemeyen cihazlara ramdisk takılır.
aşağıdaki modüllerin bir varyantını oluşturur. GKI için destek eklemek üzere modülleri
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Kurtarmada ilk aşama ekleme sırasında meta veri sağlama toplamlarını desteklemek için şunları etkinleştirin: bu modüllerin kurtarma varyantını kullanıyor ve bunları da yükleyin.
Başlatma işlemindeki değişiklikler
Android cihaz başlatılırken başlatma işlemi değişmez. vendor_boot
+
genel ramdisk, mevcut başlatma işlemine benzer, ancak fstab
vendor_boot
tarihinden itibaren yüklenir. system/bin/recovery
var olmadığı için
first_stage_init
bunu normal bir başlatma gibi işler.
Kurtarma modundayken başlatma işlemi değişmez. Kurtarma
ramdisk, mevcut kurtarma işlemiyle aynı şekilde yüklenir.
Çekirdek, recovery
görüntüsünden yüklenir. İlgili içeriği oluşturmak için kullanılan
kurtarma modu için başlatma işlemi aşağıdaki gibidir.
Bootloader başlar ve ardından şunları yapar:
- Kurtarma RAM diskini
/
hedefine aktarır. recovery
bölümünden çekirdeği çalıştırır.
- Kurtarma RAM diskini
Çekirdek, ramdisk'i
/
konumuna ekler ve ardından/init
işlemini yürütür. Bu,recovery
RAM'inden/system/bin/init
.İlk aşama başlatma, ardından şunları yapar:
IsRecoveryMode() == true
veForceNormalBoot() == false
ayarlarını yapar./lib/modules
kaynağından tedarikçi çekirdek modüllerini yükler.DoFirstStageMount()
çağrısı yapıyor ancak ekleme işlemini atlıyor çünküIsRecoveryMode() == true
. (Cihaz ramdisk'i yer açmaz (çünkü/
hâlâ aynı), ancakSetInitAvbVersionInRecovery()
çağrısı yapıyor.)- İkinci aşama başlatma işlemini
/system/bin/init
konumundanrecovery
RAM'den başlatır.
Başlatma görüntüsü zaman damgaları
Aşağıdaki kod, örnek bir boot
resmi 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 dosyaya
system/etc/ramdisk/build.prop
dosyası eklenir ramdisk'e bakın. Bu dosya, derlemenin zaman damgası bilgilerini içerir.Çalışma zamanında, ilk aşama
init
kopyalar önce ramdisk'i boşaltmadan önce ramdisktentmpfs
'e dosyainit
. aşama okuyabilirboot
resim zaman damgası özelliklerini ayarlamak için bu dosyayı kullanın.