Di Android 12, image boot
generik, yang disebut sebagai
Gambar Kernel Generik (GKI),
berisi ramdisk generik
dan {i>kernel<i} GKI.
Untuk perangkat yang diluncurkan dengan Android 13,
ramdisk dihapus dari image boot
dan ditempatkan di init_boot
terpisah
gambar. Perubahan ini membuat gambar boot
hanya memiliki
Kernel GKI.
Untuk mengupgrade perangkat yang terus menggunakan Android 12
atau versi {i>kernel<i} yang lebih lama, {i>
ramdisk<i} generik tetap di tempatnya
tidak ada persyaratan untuk gambar init_boot
baru.
Untuk membangun ramdisk generik, pindahkan resource khusus vendor keluar dari ramdisk
sehingga ramdisk generik hanya berisi init
tahap pertama dan properti
yang berisi informasi stempel waktu.
Di perangkat yang:
Jangan gunakan partisi
recovery
khusus, semua bit pemulihan akan dipindahkan dari ramdisk generik ke ramdiskvendor_boot
.Gunakan partisi
recovery
khusus, tidak ada perubahan pada ramdiskrecovery
diperlukan karena ramdiskrecovery
bersifat mandiri.
Arsitektur
Diagram berikut mengilustrasikan arsitektur untuk perangkat yang menjalankan Android
12 dan lebih tinggi.
Peluncuran perangkat dengan Android 13 memiliki
Gambar init_boot
yang berisi ramdisk generik.
Perangkat yang diupgrade dari Android 12 ke Android
13 menggunakan arsitektur yang sama seperti pada
Android 12.
Luncurkan dengan Android 13, tanpa pemulihan khusus
Gambar 1. Perangkat yang diluncurkan atau diupgrade ke Android 13, dengan GKI, tanpa pemulihan khusus.
Diluncurkan dengan Android 13, pemulihan A/B khusus dan A/B (ramdisk khusus)
Gambar 2. Perangkat yang diluncurkan atau diupgrade ke Android 13, dengan GKI, khusus, dan pemulihan A/B.
Lihat gambar ini jika perangkat memiliki partisi recovery_a
dan recovery_b
.
Diluncurkan dengan Android 13, pemulihan khusus dan non-A/B (ramdisk khusus)
Gambar 3. Perangkat yang diluncurkan atau diupgrade ke Android 13, dengan GKI, pemulihan khusus dan non-A/B.
Lihat gambar ini jika perangkat memiliki partisi bernama recovery
tanpa
akhiran slot.
Luncurkan atau upgrade ke Android 12, tanpa pemulihan khusus
Gambar 4. Perangkat yang diluncurkan atau diupgrade ke Android 12, dengan GKI, tanpa pemulihan khusus.
Luncurkan atau upgrade ke Android 12, pemulihan A/B khusus dan A/B (ramdisk khusus)
Gambar 5. Perangkat yang diluncurkan atau diupgrade ke Android 12, dengan GKI, khusus, dan pemulihan A/B.
Lihat gambar ini jika perangkat memiliki partisi recovery_a
dan recovery_b
.
Luncurkan atau upgrade ke Android 12, pemulihan khusus dan non-A/B (ramdisk khusus)
Gambar 6. Perangkat yang diluncurkan atau diupgrade ke Android 12, dengan GKI, pemulihan khusus dan non-A/B.
Lihat gambar ini jika perangkat memiliki partisi bernama recovery
tanpa
akhiran slot.
Upgrade ke Android 12, recovery-as-boot (recovery-as-ramdisk)
Gambar 7. Perangkat yang diupgrade ke Android 12, tanpa GKI, recovery-as-boot.
Upgrade ke Android 12, pemulihan khusus (ramdisk khusus)
Gambar 8. Perangkat yang diupgrade ke Android 12, tanpa GKI, pemulihan khusus.
Konten image booting
Booting Android berisi hal berikut.
init_boot
gambar ditambahkan untuk perangkat yang diluncurkan dengan Android 13- Versi header V4
- Image ramdisk generik
Gambar generik
boot
- Header versi V3 atau
V4
boot_signature
untuk sertifikasi boot.img GKI (khusus v4). Tujuan GKI tersertifikasiboot.img
tidak ditandatangani untuk booting terverifikasi. OEM harus tetap menandatanganiboot.img
bawaan dengan metode AVB tombol.cmdline
umum (GENERIC_KERNEL_CMDLINE
)- Kernel GKI
- Image ramdisk generik
- Hanya disertakan dalam
boot
gambar dari Android 12 dan sebelumnya
- Hanya disertakan dalam
- Header versi V3 atau
V4
Image
vendor_boot
(untuk detailnya, lihat Booting Vendor Partisi)- Header
vendor_boot
cmdline
khusus perangkat (BOARD_KERNEL_CMDLINE
)
- Gambar ramdisk
vendor_boot
lib/modules
- Resource pemulihan (jika tidak ada pemulihan khusus)
- Gambar
dtb
- Header
Gambar
recovery
- Header versi V2
cmdline
khusus perangkat untuk pemulihan, jika diperlukan- Untuk partisi pemulihan non-A/B, isi header harus berupa mandiri; lihat Gambar Pemulihan. Contoh:
cmdline
tidak disambungkan keboot
danvendor_boot
cmdline
.- Header menentukan DTBO pemulihan, jika diperlukan.
- Untuk partisi pemulihan A/B, konten dapat digabungkan atau disimpulkan
dari
boot
danvendor_boot
. Contoh: cmdline
disambungkan keboot
danvendor_boot
cmdline
.- DTBO dapat disimpulkan dari header
vendor_boot
.
- Gambar ramdisk
recovery
- Referensi pemulihan
- Untuk partisi pemulihan non-A/B, isi ramdisk harus mandiri; lihat Gambar Pemulihan. Contoh:
lib/modules
harus berisi semua modul kernel yang diperlukan untuk melakukan booting mode pemulihan- Ramdisk pemulihan harus berisi
init
. - Untuk partisi pemulihan A/B, ramdisk pemulihan ditambahkan ke
generik dan ramdisk
vendor_boot
, sehingga tidak perlu mandiri. Contoh: lib/modules
mungkin hanya berisi modul kernel tambahan yang diperlukan untuk mode pemulihan {i>boot<i} selain modul {i> kernel<i} di ramdiskvendor_boot
.- Symlink di
/init
mungkin ada, tetapi dibayangi oleh biner/init
tahap pertama dalam image booting.
- Header versi V2
Konten image ramdisk umum
Ramdisk generik berisi komponen berikut.
init
system/etc/ramdisk/build.prop
ro.PRODUCT.bootimg.* build
properti- Direktori kosong untuk titik pemasangan:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
first_stage_ramdisk/
- Direktori kosong duplikat untuk titik pemasangan:
debug_ramdisk/
,mnt/
,dev/
,sys/
,proc/
,metadata/
- Direktori kosong duplikat untuk titik pemasangan:
Integrasi image booting
Flag build mengontrol cara init_boot
, boot
, recovery
, dan vendor_boot
image dasar dibangun. Nilai variabel papan boolean harus berupa string
true
atau kosong (yang merupakan default).
TARGET_NO_KERNEL
. Variabel ini menunjukkan apakah build menggunakan boot bawaan gambar. Jika variabel ini ditetapkan ketrue
, tetapkanBOARD_PREBUILT_BOOTIMAGE
ke lokasi boot image bawaan (BOARD_PREBUILT_BOOTIMAGE:= device/${company}/${board}/boot.img
)BOARD_USES_RECOVERY_AS_BOOT
. Variabel ini menunjukkan apakah perangkat menggunakan gambarrecovery
sebagai gambarboot
. Saat menggunakan GKI, variabel ini resource kosong dan pemulihan harus dipindahkan kevendor_boot
.BOARD_USES_GENERIC_KERNEL_IMAGE
. Variabel ini menunjukkan bahwa {i>board <i}menggunakan GKI. Variabel ini tidak mempengaruhi {i>sysprops<i} atauPRODUCT_PACKAGES
.Ini adalah {i>switch<i} GKI tingkat dewan; semua variabel berikut dibatasi oleh variabel ini.
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
. Variabel ini mengontrol apakah resource pemulihan ramdisk di-build kevendor_boot
.Jika disetel ke
true
, resource pemulihan akan dibuat hanya untukvendor-ramdisk/
dan tidak dibuat untukrecovery/root/
.Jika kosong, resource pemulihan hanya di-build untuk
recovery/root/
dan tidak dibuat untukvendor-ramdisk/
.
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT
. Variabel ini mengontrol apakah GSI Tombol AVB dibuat untukvendor_boot
.Jika ditetapkan ke
true
, jikaBOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT
:Jika disetel, kunci AVB GSI dibuat untuk
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/avb
.Jika tidak disetel, kunci AVB GSI dibuat untuk
$ANDROID_PRODUCT_OUT/vendor-ramdisk/avb
.
Saat kosong, jika
BOARD_RECOVERY_AS_ROOT
:Jika disetel, kunci AVB GSI dibuat untuk
$ANDROID_PRODUCT_OUT/recovery/root/first_stage_ramdisk/avb
.Jika tidak disetel, kunci AVB GSI dibuat untuk
$ANDROID_PRODUCT_OUT/ramdisk/avb
.
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE
. Variabel ini mengontrol apakah Gambarrecovery
berisi kernel atau tidak. Peluncuran perangkat dengan Android 12 dan menggunakan partisirecovery
A/B harus menyetelnya variabel ketrue
. Perangkat yang diluncurkan dengan Android 12 dan penggunaan non-A/B harus menetapkan variabel ini kefalse
untuk mempertahankan gambar pemulihan mandiri.BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES
. Variabel ini mengontrol apakah$OUT/boot*.img
disalin keIMAGES/
pada file target.aosp_arm64
harus menetapkan variabel ini ketrue
.Perangkat lain harus mengosongkan variabel ini.
BOARD_INIT_BOOT_IMAGE_PARTITION_SIZE
. Variabel ini mengontrol apakahinit_boot.img
akan dibuat dan menetapkan ukurannya. Jika disetel, ramdisk generik ditambahkan keinit_boot.img
, bukanboot.img
, dan memerlukanBOARD_AVB_INIT_BOOT*
variabel yang akan ditetapkan vbmeta berantai.
Kombinasi yang diizinkan
Komponen atau variabel | Mengupgrade perangkat tanpa partisi pemulihan | Mengupgrade perangkat dengan partisi pemulihan | Luncurkan perangkat tanpa partisi pemulihan | Luncurkan perangkat dengan partisi pemulihan A/B | Luncurkan perangkat dengan partisi pemulihan non-A/B | AOS_arm64 |
---|---|---|---|---|---|---|
Berisi boot |
ya | ya | ya | ya | ya | ya |
Berisi init_boot (Android 13) |
belum | tidak | ya | ya | ya | ya |
Berisi vendor_boot |
opsional | opsional | ya | ya | ya | belum |
Berisi recovery |
belum | ya | belum | ya | ya | belum |
BOARD_USES_RECOVERY_AS_BOOT |
true |
kosong | kosong | kosong | kosong | kosong |
BOARD_USES_GENERIC_KERNEL_IMAGE |
kosong | kosong | true |
true |
true |
true |
PRODUCT_BUILD_RECOVERY_IMAGE |
kosong | true atau kosong |
kosong | true atau kosong |
true atau kosong |
kosong |
BOARD_RECOVERYIMAGE_PARTITION_SIZE |
kosong | > 0 | kosong | > 0 | > 0 | kosong |
BOARD_MOVE_RECOVERY_RESOURCES_TO_VENDOR_BOOT |
kosong | kosong | true |
kosong | kosong | kosong |
BOARD_MOVE_GSI_AVB_KEYS_TO_VENDOR_BOOT |
kosong | kosong | true |
true |
true |
kosong |
BOARD_EXCLUDE_KERNEL_FROM_RECOVERY_IMAGE |
kosong | kosong | kosong | true |
kosong | kosong |
BOARD_COPY_BOOT_IMAGE_TO_TARGET_FILES |
kosong | kosong | kosong | kosong | kosong | true |
Perangkat dengan partisi recovery
khusus dapat disetel
PRODUCT_BUILD_RECOVERY_IMAGE
ke true
atau kosong. Untuk perangkat ini, jika
BOARD_RECOVERYIMAGE_PARTITION_SIZE
disetel, image recovery
akan dibuat.
Mengaktifkan vbmeta berantai untuk booting
Vbmeta berantai harus diaktifkan untuk gambar boot
dan init_boot
. Menentukan
hal berikut:
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
Misalnya, lihat mengubah.
Sistem sebagai root
System-as-root tidak didukung untuk perangkat yang menggunakan GKI. Aktif
perangkat tersebut, BOARD_BUILD_SYSTEM_ROOT_IMAGE
harus kosong. Sistem sebagai root
juga tidak didukung untuk perangkat yang
menggunakan partisi dinamis.
Konfigurasi produk
Perangkat yang menggunakan ramdisk generik
harus menginstal daftar file yang
diizinkan untuk
diinstal ke ramdisk. Untuk melakukannya, tentukan hal berikut di
device.mk
:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
File generic_ramdisk.mk
juga mencegah makefile lain secara tidak sengaja
menginstal file lain ke ramdisk (memindahkan file tersebut ke vendor_ramdisk
).
Menyiapkan perangkat
Petunjuk penyiapan berbeda-beda di setiap perangkat yang diluncurkan dengan Android 13, mengupgrade ke Android 12, dan meluncurkan dengan Android 12. Android 13, penyiapannya mirip dengan Android 12
Perangkat yang Melakukan Upgrade ke Android 12:
Dapat mempertahankan nilai
BOARD_USES_RECOVERY_AS_BOOT
. Jika mereka melakukannya, mereka menggunakan konfigurasi lama dan variabel build baru harus kosong. Jika seperti perangkat:Dapat menetapkan
BOARD_USES_RECOVERY_AS_BOOT
ke kosong. Jika mereka melakukannya, mereka menggunakan konfigurasi baru. Jika perangkat tersebut:Jangan gunakan partisi
recovery
khusus, arsitekturnya akan ditampilkan seperti yang ditunjukkan di Gambar 1 dan opsi penyiapan perangkat adalah Option 1.Gunakan partisi
recovery
khusus, arsitekturnya seperti yang ditunjukkan di Gambar 2a atau Gambar 2b dan penyiapan perangkat adalah Opsi 2a atau Opsi 2b.
Perangkat yang diluncurkan dengan Android 12 harus disetel
BOARD_USES_RECOVERY_AS_BOOT
untuk mengosongkan dan menggunakan konfigurasi baru. Jika seperti perangkat:
Karena aosp_arm64
hanya membangun GKI (dan bukan vendor_boot
atau pemulihan), kode ini
bukan target lengkap. Untuk aosp_arm64
konfigurasi build, lihat
generic_arm64
.
Opsi 1: Tidak ada partisi pemulihan khusus
Perangkat tanpa partisi recovery
berisi image boot
generik dalam
Partisi boot
. Ramdisk vendor_boot
berisi semua
sumber daya pemulihan,
termasuk lib/modules
(dengan modul kernel vendor). Pada perangkat tersebut,
konfigurasi produk yang diwarisi dari
generic_ramdisk.mk
.
Menetapkan nilai BOARD
Tetapkan nilai berikut:
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
Biner dan symlink init
Ramdisk vendor_boot
dapat berisi symlink /init
hingga /system/bin/init
,
dan init_second_stage.recovery
pukul /system/bin/init
. Namun, karena
ramdisk generik yang disambungkan setelah ramdisk vendor_boot
, /init
{i>symlink<i} akan ditimpa. Saat perangkat melakukan booting ke pemulihan,
Biner /system/bin/init
diperlukan untuk mendukung init tahap kedua. Isi
dari vendor_boot
+ ramdisk generik adalah sebagai berikut:
/init
(dari ramdisk umum, dibuat dariinit_first_stage
)/system/bin/init
(darivendor_ramdisk
, dibuat dariinit_second_stage.recovery
)
Memindahkan file fstab
Pindahkan file fstab
apa pun yang diinstal ke ramdisk generik ke
vendor_ramdisk
. Misalnya, lihat
mengubah.
Menginstal modul
Anda dapat menginstal modul khusus perangkat ke vendor_ramdisk
(lewati
langkah ini jika Anda tidak memiliki modul khusus perangkat untuk diinstal).
Gunakan varian
vendor_ramdisk
dari modul saat modul diinstal ke/first_stage_ramdisk
. Modul ini akan tersedia setelahinit
mengalihkan root ke/first_stage_ramdisk
tetapi sebeluminit
mengalihkan root ke/system
. Misalnya, lihat Checksum metadata dan Kompresi A/B virtual.Gunakan varian
recovery
dari modul saat modul diinstal ke/
. Modul ini harus tersedia sebeluminit
mengalihkan root ke/first_stage_ramdisk
. Untuk detail tentang cara menginstal modul ke/
, lihat Pertama konsol stage.
Konsol tahap pertama
Karena konsol tahap pertama dimulai sebelum init
mengalihkan root ke
/first_stage_ramdisk
, Anda harus menginstal varian modul recovery
.
Secara {i>default<i}, kedua varian modul diinstal ke
build/make/target/product/base_vendor.mk
, jadi jika makefile perangkat mewarisi
dari file tersebut, Anda tidak perlu menginstal varian recovery
secara eksplisit.
Untuk menginstal modul pemulihan secara eksplisit, gunakan langkah berikut.
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
Hal ini memastikan bahwa linker
, sh
, dan toybox
diinstal ke
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
, yang kemudian diinstal ke
/system/bin
di bawah vendor_ramdisk
.
Guna menambahkan modul yang diperlukan untuk konsol tahap pertama (misalnya, adbd), gunakan mengikuti.
PRODUCT_PACKAGES += adbd.recovery
Cara ini memastikan bahwa modul yang ditentukan diinstal ke
$ANDROID_PRODUCT_OUT/recovery/root/system/bin
, yang kemudian diinstal ke
/system/bin
di bawah vendor_ramdisk
.
Checksum metadata
Untuk mendukung metadata
checksum
selama pemasangan tahap pertama, perangkat yang tidak mendukung GKI menginstal ramdisk
varian dari modul berikut. Guna menambahkan dukungan untuk GKI, pindahkan modul ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Misalnya, lihat daftar perubahan.
Kompresi A/B virtual
Untuk mendukung kompresi A/B virtual, snapuserd
harus diinstal ke
vendor_ramdisk
. Perangkat harus mewarisi dari
virtual_ab_ota/compression.mk
,
yang menginstal varian vendor_ramdisk
dari snapuserd
.
Perubahan pada proses booting
Proses {i>booting<i} ke pemulihan atau ke Android tidak berubah, dengan pengecualian berikut:
- Ramdisk
build.prop
bergerak ke/second_stage_resources
sehingga tahap keduainit
dapat membaca stempel waktu build booting.
Karena resource dipindahkan dari ramdisk generik ke ramdisk vendor_boot
, hasil
penggabungan ramdisk generik ke ramdisk vendor_boot
tidak berubah.
Sediakan e2fsck
Makefile perangkat dapat mewarisi dari:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
jika perangkat mendukung virtual A/B tetapi bukan kompresi.virtual_ab_ota/compression.mk
jika perangkat mendukung A/B virtual kompresi data.
Penginstalan makefile produk
$ANDROID_PRODUCT_OUT/vendor-ramdisk/first_stage_ramdisk/system/bin/e2fsck
. Di
saat runtime, tahap pertama init
akan mengalihkan root menjadi /first_stage_ramdisk
, lalu
mengeksekusi /system/bin/e2fsck
.
Opsi 2a: Partisi pemulihan A/B dan khusus
Gunakan opsi ini untuk perangkat dengan partisi recovery
A/B; yaitu,
perangkat memiliki recovery_a
dan recovery_b partition
. Perangkat tersebut mencakup
Perangkat A/B dan A/B Virtual yang partisi pemulihannya dapat diperbarui, dengan
konfigurasi berikut:
AB_OTA_PARTITIONS += recovery
Ramdisk vendor_boot
berisi bit vendor dari ramdisk dan vendor
modul {i>kernel<i}, termasuk yang berikut ini:
File
fstab
khusus perangkatlib/modules
(termasuk modul kernel vendor)
Ramdisk recovery
berisi semua resource pemulihan. Pada perangkat tersebut,
konfigurasi produk yang diwarisi dari
generic_ramdisk.mk
.
Menetapkan nilai BOARD
Tetapkan nilai berikut untuk perangkat dengan partisi recovery
A/B:
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
Biner dan symlink init
Ramdisk recovery
dapat berisi symlink /init -> /system/bin/init
, dan
init_second_stage.recovery
pukul /system/bin/init
. Namun, karena booting
ramdisk digabungkan setelah ramdisk recovery
, symlink /init
akan ditimpa. Saat perangkat melakukan booting ke mode pemulihan, /system/bin/init
biner diperlukan untuk
mendukung init tahap kedua.
Saat perangkat melakukan booting ke recovery
, konten dari recovery
+
vendor_boot
+ ramdisk umum adalah sebagai berikut:
/init
(dari ramdisk, dibuat dariinit_first_stage
)/system/bin/init
(darirecovery
ramdisk, dibuat dariinit_second_stage.recovery
, dan dieksekusi dari/init
)
Saat perangkat melakukan booting ke Android, konten vendor_boot
+ generik
ramdisk adalah sebagai berikut:
/init
(dari ramdisk umum, dibuat dariinit_first_stage
)
Memindahkan file fstab
Pindahkan file fstab
apa pun yang diinstal ke ramdisk umum ke
vendor_ramdisk
. Misalnya, lihat
mengubah.
Menginstal modul
Atau, Anda dapat menginstal modul khusus perangkat ke vendor_ramdisk
(lewati
langkah ini jika Anda tidak memiliki modul khusus perangkat untuk diinstal). Init
tidak mengganti {i>root<i}. Varian vendor_ramdisk
modul diinstal ke
root dari vendor_ramdisk
. Misalnya cara menginstal modul untuk
vendor_ramdisk
, lihat Konsol tahap pertama, Metadata
checksum, dan A/B Virtual
kompresi.
Konsol tahap pertama
Untuk menginstal varian vendor_ramdisk
dari modul, gunakan hal berikut:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
Hal ini memastikan bahwa linker
, sh
, dan toybox
diinstal ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
, yang kemudian diinstal ke
/system/bin
di bawah vendor_ramdisk
.
Guna menambahkan modul yang diperlukan untuk konsol tahap pertama (misalnya, adbd), aktifkan
varian vendor_ramdisk
dari modul ini dengan mengupload patch yang relevan ke
AOSP, lalu gunakan yang berikut ini,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Cara ini memastikan bahwa modul yang ditentukan diinstal ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
. Jika ramdisk vendor_boot
dimuat dalam mode pemulihan, modul ini juga tersedia dalam recovery
. Jika
Ramdisk vendor_boot
tidak dimuat dalam mode pemulihan, perangkat dapat memilih
instal adbd.recovery
juga.
Checksum metadata
Untuk mendukung metadata
checksum
selama pemasangan tahap pertama, perangkat yang tidak mendukung GKI menginstal ramdisk
varian dari modul berikut. Guna menambahkan dukungan untuk GKI, pindahkan modul ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Misalnya, lihat daftar perubahan.
Kompresi A/B virtual
Untuk mendukung kompresi A/B Virtual, snapuserd
harus diinstal ke
vendor_ramdisk
. Perangkat harus mewarisi dari
virtual_ab_ota/compression.mk
,
yang menginstal varian vendor_ramdisk
dari snapuserd
.
Perubahan pada proses booting
Saat melakukan booting ke Android, proses booting tidak berubah. Tombol vendor_boot
+
ramdisk generik mirip dengan proses {i>booting<i} yang ada, hanya saja fstab
pemuatan dari vendor_boot
. Karena system/bin/recovery
tidak ada,
first_stage_init
menanganinya sebagai booting normal.
Saat booting ke mode pemulihan, proses booting akan berubah. Tombol pemulihan +
vendor_boot
+ ramdisk generik mirip dengan proses pemulihan yang ada, tetapi
kernel dimuat dari gambar boot
, bukan dari gambar recovery
.
Proses booting untuk mode pemulihan adalah sebagai berikut.
Bootloader dimulai, lalu melakukan hal berikut:
- Mengirim pemulihan +
vendor_boot
+ ramdisk generik ke/
. (Jika OEM menduplikasi modul {i>kernel<i} dalam ramdisk pemulihan dengan menambahkannya keBOARD_RECOVERY_KERNEL_MODULES
),vendor_boot
bersifat opsional.) - Menjalankan kernel dari partisi
boot
.
- Mengirim pemulihan +
Kernel memasang ramdisk ke
/
lalu mengeksekusi/init
dari ramdisk generik.Init tahap pertama dimulai, lalu melakukan hal berikut:
- Menetapkan
IsRecoveryMode() == true
danForceNormalBoot() == false
. - Memuat modul kernel vendor dari
/lib/modules
. - Memanggil
DoFirstStageMount()
tetapi melewati pemasangan karenaIsRecoveryMode() == true
. (Perangkat tidak memiliki ramdisk yang kosong (karena/
masih sama), tetapi memanggilSetInitAvbVersionInRecovery()
.) - Memulai init tahap kedua dari
/system/bin/init
dari ramdiskrecovery
.
- Menetapkan
Sediakan e2fsck
Makefile perangkat dapat mewarisi dari:
virtual_ab_ota/launch_with_vendor_ramdisk.mk
jika perangkat mendukung virtual A/B tetapi bukan kompresi.virtual_ab_ota/compression.mk
jika perangkat mendukung A/B virtual kompresi data.
Penginstalan makefile produk
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin/e2fsck
. Di
saat runtime, tahap pertama init
akan mengeksekusi /system/bin/e2fsck
.
Opsi 2b: Partisi pemulihan khusus dan non-A/B
Gunakan opsi ini untuk perangkat dengan partisi recovery
non-A/B; yaitu,
perangkat memiliki partisi bernama recovery
tanpa akhiran slot. Perangkat tersebut
termasuk:
- perangkat non-A/B;
- Perangkat A/B dan A/B Virtual yang partisi pemulihannya bukan dapat diperbarui. (Ini tidak biasa.)
Ramdisk vendor_boot
berisi bit vendor dari ramdisk dan vendor
modul {i>kernel<i}, termasuk yang berikut ini:
- File
fstab
khusus perangkat lib/modules
(termasuk modul kernel vendor)
Gambar recovery
harus bersifat mandiri. Harus berisi
semua resource yang diperlukan untuk mem-booting mode pemulihan, termasuk:
- Gambar kernel
- Gambar DTBO
- Modul kernel di
lib/modules
- Init tahap pertama sebagai symlink
/init -> /system/bin/init
- Biner init tahap kedua
/system/bin/init
- File
fstab
khusus perangkat - Semua resource pemulihan lainnya, termasuk biner
recovery
Pada perangkat tersebut, konfigurasi produk mewarisi
mulai dari generic_ramdisk.mk
.
Menetapkan nilai BOARD
Tetapkan nilai berikut untuk perangkat non-A/B:
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
Biner dan symlink init
Ramdisk recovery
harus berisi symlink /init -> /system/bin/init
, dan
init_second_stage.recovery
pukul /system/bin/init
. Saat perangkat masuk ke
mode pemulihan, biner /system/bin/init
diperlukan untuk mendukung keduanya terlebih dahulu
int Tahap kedua dan tahap kedua.
Saat perangkat di-booting ke recovery
, konten ramdisk recovery
akan
sebagai berikut:
/init -> /system/bin/init
(darirecovery
ramdisk)/system/bin/init
(darirecovery
ramdisk, dibuat dariinit_second_stage.recovery
, dan dieksekusi dari/init
)
Saat perangkat melakukan booting ke Android, konten vendor_boot
+ generik
ramdisk adalah sebagai berikut:
/init
(dari ramdisk, dibuat dariinit_first_stage
)
Memindahkan file fstab
Pindahkan file fstab
apa pun yang diinstal ke ramdisk umum ke
ramdisk vendor_ramdisk
dan recovery
. Misalnya, lihat
mengubah.
Menginstal modul
Anda dapat menginstal modul khusus perangkat ke vendor_ramdisk
dan
RAMdisk recovery
(lewati
langkah ini jika Anda tidak memiliki modul khusus perangkat untuk diinstal). init
tidak mengganti {i>root<i}. Varian vendor_ramdisk
modul diinstal ke
root dari vendor_ramdisk
. Varian recovery
modul diinstal ke
root dari ramdisk recovery
. Misalnya cara menginstal modul untuk
Ramdisk vendor_ramdisk
dan recovery
, se
Konsol tahap pertama dan Metadata
checksum.
Konsol tahap pertama
Untuk menginstal varian vendor_ramdisk
dari modul, gunakan hal berikut:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
shell_and_utilities_vendor_ramdisk \
Hal ini memastikan bahwa linker
, sh
, dan toybox
diinstal ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
, yang kemudian diinstal ke
/system/bin
di bawah vendor_ramdisk
.
Guna menambahkan modul yang diperlukan untuk konsol tahap pertama (misalnya, adbd), aktifkan
varian vendor_ramdisk
dari modul ini dengan mengupload patch yang relevan ke
AOSP, lalu gunakan yang berikut ini,
PRODUCT_PACKAGES += adbd.vendor_ramdisk
Cara ini memastikan bahwa modul yang ditentukan diinstal ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
.
Untuk menginstal varian recovery
dari modul, ganti vendor_ramdisk
dengan
recovery
:
PRODUCT_PACKAGES += \
linker.recovery \
shell_and_utilities_recovery \
adbd.recovery \
Checksum metadata
Untuk mendukung metadata
checksum
selama pemasangan tahap pertama, perangkat yang tidak mendukung GKI menginstal ramdisk
varian dari modul berikut. Guna menambahkan dukungan untuk GKI, pindahkan modul ke
$ANDROID_PRODUCT_OUT/vendor-ramdisk/system/bin
:
PRODUCT_PACKAGES += \
linker.vendor_ramdisk \
resize2fs.vendor_ramdisk \
tune2fs.vendor_ramdisk \
Untuk mendukung checksum metadata selama pemasangan tahap pertama dalam pemulihan, aktifkan varian pemulihan dari modul ini dan menginstalnya juga.
Perubahan pada proses booting
Saat melakukan booting ke Android, proses booting tidak berubah. Tombol vendor_boot
+
ramdisk generik mirip dengan proses {i>booting<i} yang ada, hanya saja fstab
pemuatan dari vendor_boot
. Karena system/bin/recovery
tidak ada,
first_stage_init
menanganinya sebagai booting normal.
Saat melakukan booting ke mode pemulihan, proses booting tidak berubah. Pemulihan
{i>ramdisk<i} dimuat dengan cara yang sama
seperti proses pemulihan yang ada.
Kernel dimuat dari image recovery
. Tujuan
proses {i>booting<i} untuk mode pemulihan
adalah sebagai berikut.
Bootloader dimulai, lalu melakukan hal berikut:
- Mengirim ramdisk pemulihan ke
/
. - Menjalankan kernel dari partisi
recovery
.
- Mengirim ramdisk pemulihan ke
Kernel memasang ramdisk ke
/
lalu mengeksekusi/init
, yang merupakan symlink ke/system/bin/init
dari ramdiskrecovery
.Init tahap pertama dimulai, lalu melakukan hal berikut:
- Menetapkan
IsRecoveryMode() == true
danForceNormalBoot() == false
. - Memuat modul kernel vendor dari
/lib/modules
. - Memanggil
DoFirstStageMount()
tetapi melewati pemasangan karenaIsRecoveryMode() == true
. (Perangkat tidak memiliki ramdisk yang kosong (karena/
masih sama), tetapi memanggilSetInitAvbVersionInRecovery()
.) - Memulai init tahap kedua dari
/system/bin/init
dari ramdiskrecovery
.
- Menetapkan
Stempel waktu gambar booting
Kode berikut adalah contoh file stempel waktu gambar boot
:
####################################
# 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
Pada waktu build, file
system/etc/ramdisk/build.prop
ditambahkan ke class generik ramdisk. File ini berisi informasi stempel waktu build.Saat runtime, tahap pertama
init
salinan dari ramdisk ketmpfs
sebelum mengosongkan ramdisk agar kedua tahapinit
dapat membaca file ini untuk menyetel properti stempel waktu gambarboot
.