Perangkat berkemampuan Treble harus mengaktifkan
pengaitan tahap pertama untuk memastikan
init
dapat memuat Security-Enhanced Linux
(SELinux) yang tersebar di seluruh system
dan
partisi vendor
. Akses ini juga memungkinkan
pemuatan {i>kernel<i}
modul Anda sesegera mungkin setelah {i>booting<i} {i>kernel<i}.
Untuk melakukan pemasangan awal, Android harus memiliki akses ke sistem file di
tempat modul berada. Android 8.0 dan yang lebih baru mendukung pemasangan
/system
, /vendor
, atau /odm
paling cepat
Tahap pertama init
(yaitu, sebelum SElinux diinisialisasi).
Entri Fstab
Di Android 9 dan yang lebih lama, perangkat dapat menentukan entri fstab
untuk
partisi yang terpasang lebih awal menggunakan hierarki perangkat
overlay (DTO). Di Android 10 dan yang lebih tinggi,
perangkat harus menentukan entri fstab
untuk partisi yang terpasang lebih awal
menggunakan file fstab
di tahap pertama
ramdisk Anda sendiri. Android
10 memperkenalkan tanda fs_mgr
berikut
untuk digunakan dalam file fstab
:
first_stage_mount
menunjukkan bahwa partisi terpasang oleh init tahap pertama.logical
menunjukkan bahwa ini adalah partisi dinamis.avb=vbmeta-partition-name
menentukan Partisivbmeta
. Init tahap pertama melakukan inisialisasi partisi ini sebelum memasang partisi lain. Argumen untuk tanda ini dapat dihilangkan jika partisivbmeta
untuk entri telah ditentukan oleh entrifstab
lain di baris sebelumnya.
Contoh berikut menunjukkan entri fstab
untuk menetapkan
Partisi system
, vendor
, dan product
sebagai partisi logis (dinamis).
#<dev> <mnt_point> <type> <mnt_flags options> <fs_mgr_flags> system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount vendor /vendor ext4 ro,barrier=1 wait,slotselect,avb=vbmeta,logical,first_stage_mount product /product ext4 ro,barrier=1 wait,slotselect,avb,logical,first_stage_mount
Dalam contoh ini, vendor menentukan partisi vbmeta
menggunakan
flag fs_mgr
avb=vbmeta
, tetapi product
menghilangkan argumen vbmeta
karena vendor telah menambahkan
vbmeta
ke daftar partisi.
Perangkat yang menjalankan Android 10 dan yang lebih tinggi harus menempatkan
File fstab
di ramdisk dan di vendor
partisi.
{i>Raddisk<i}
Lokasi file fstab
dalam ramdisk bergantung pada cara perangkat
menggunakan {i>ramdisk<i}.
Perangkat dengan ramdisk booting harus menempatkan fstab
di root boot ramdisk. Jika perangkat memiliki {i>boot ramdisk<i} dan
ramdisk pemulihan, tidak ada
perubahan yang diperlukan pada ramdisk pemulihan. Contoh:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
Perangkat yang menggunakan pemulihan sebagai ramdisk harus menggunakan
parameter command line kernel androidboot.force_normal_boot=1
ke
memutuskan apakah akan {i>booting<i} ke
Android atau melanjutkan {i>booting <i}ke pemulihan. Perangkat
Meluncurkan dengan Android 12 atau yang lebih baru dengan
{i>kernel<i} versi 5.10 atau yang lebih baru harus
menggunakan {i>bootconfig<i} untuk meneruskan
Parameter androidboot.force_normal_boot=1
. Di beberapa
perangkat ini, tahap pertama init
melakukan operasi {i>switch root<i} untuk
/first_stage_ramdisk
sebelum memasang partisi pemasangan awal,
jadi perangkat harus
menempatkan file fstab
di
$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
. Contoh:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
Vendor
Semua perangkat harus menempatkan salinan file fstab
ke dalam
/vendor/etc
. Hal ini karena init tahap
pertama membebaskan
{i>ramdisk<i} setelah menyelesaikan pemasangan awal partisi dan melakukan
ganti operasi root untuk memindahkan penyangga pada /system
ke
/
. Operasi berikutnya yang perlu mengakses fstab
oleh karena itu, file harus menggunakan salinan di /vendor/etc
. Contoh:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
Pasang partisi lebih awal, VBoot 1.0
Persyaratan untuk memasang partisi di awal dengan VBoot 1.0 meliputi:
- Jalur node perangkat harus menggunakan symlink
by-name
-nya difstab
dan entri devicetree. Misalnya, alih-alih menentukan partisi menggunakan/dev/block/mmcblk0pX
, pastikan bahwa partisi dan {i>node <i}perangkat akan/dev/block/…./by-name/{system,vendor,odm}
. - Jalur diberikan untuk
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
danCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
dalam konfigurasi perangkat untuk produk (yaitu,device/oem/project/device.mk
) harus cocok dengan node perangkat blok yang sesuai yang ditentukanby-name
dalam Entrifstab
/devicetree. Contoh:PRODUCT_SYSTEM_VERITY_PARTITION := /dev/block/…./by-name/system PRODUCT_VENDOR_VERITY_PARTITION := /dev/block/…./by-name/vendor CUSTOM_IMAGE_VERITY_BLOCK_DEVICE := /dev/block/…./by-name/odm
- Entri yang disediakan melalui overlay hierarki perangkat tidak boleh diulang dalam
fstab
fragmen file. Misalnya, saat menentukan entri ke memasang/vendor
di devicetree, yaitu filefstab
tidak boleh mengulangi entri tersebut. - Partisi yang memerlukan
verifyatboot
tidak boleh dipasang lebih awal (tidak didukung). - Mode/status verifikasi untuk partisi terverifikasi harus ditentukan di
kernel_cmdline
menggunakan opsiandroidboot.veritymode
(persyaratan yang ada).
Pasang devicetree lebih awal, VBoot 1.0
Di Android 8.x dan yang lebih tinggi, init
menguraikan devicetree dan
membuat fstab
entri untuk memasang partisi di awal
tahap pertama. Entri fstab
berbentuk:
src mnt_point type mnt_flags fs_mgr_flags
Properti devicetree ditentukan untuk meniru format tersebut:
fstab
entri harus kurang dari/firmware/android/fstab
di devicetree dan harus memiliki string kompatibel yang disetel keandroid,fstab
.- Setiap node di bawah
/firmware/android/fstab
diperlakukan sebagai satu entrifstab
pemasangan awal. Node harus memiliki properti yang ditentukan:dev
harus menunjuk ke node perangkat yang mewakili partisiby-name
type
harus berupa jenis sistem file (seperti dalamfstab
file)mnt_flags
harus berupa daftar tanda pemasangan yang dipisahkan koma (seperti dalam filefstab
)fsmgr_flags
harus berupa daftarfs_mgr flags
Android (seperti dalam filefstab
)
- Partisi A/B harus memiliki opsi
slotselect fs_mgr
. - Partisi yang mengaktifkan dm-verity harus memiliki
verify fs_mgr
sebelumnya.
Contoh: /sistem dan /vendor di N6P
Contoh berikut menunjukkan pemasangan awal devicetree untuk system
dan partisi vendor
di Nexus 6P:
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,verify"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
Contoh: /vendor di Pixel
Contoh berikut menunjukkan pemasangan awal devicetree untuk /vendor
di Pixel (jangan lupa menambahkan slotselect
untuk partisi yang tunduk kepada
A/B):
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,verify"; }; }; }; }; };
Memasang partisi lebih awal, VBoot 2.0
VBoot 2.0 adalah Android Verified Boot (AVB). Persyaratan untuk uji coba mount partisi dengan VBoot 2.0 adalah:
- Jalur node perangkat harus menggunakan symlink
by-name
-nya difstab
dan entri devicetree. Misalnya, alih-alih menentukan partisi menggunakan/dev/block/mmcblk0pX
, pastikan bahwa partisi diberi nama dan {i>node<i} perangkat adalah/dev/block/…./by-name/{system,vendor,odm}
. - Variabel sistem build (seperti
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
danCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) yang digunakan untuk VBoot 1.0 TIDAK yang diperlukan untuk VBoot 2.0. Sebagai gantinya, variabel build yang diperkenalkan di VBoot 2.0 (termasukBOARD_AVB_ENABLE := true
) harus ditentukan; untuk konfigurasi lengkap, lihat Buat Integrasi Sistem untuk AVB. - Entri yang disediakan melalui overlay hierarki perangkat tidak boleh diulang dalam
fstab
fragmen file. Misalnya, jika Anda menentukan entri ke memasang/vendor
di devicetree, yaitu filefstab
tidak boleh mengulangi entri tersebut. - VBoot 2.0 tidak mendukung
verifyatboot
, baik pemasangan awal apakah diaktifkan atau tidak. - Mode/status verifikasi untuk partisi terverifikasi harus ditentukan di
kernel_cmdline
menggunakanandroidboot.veritymode
(persyaratan yang ada). Pastikan Anda menyertakan perbaikan berikut untuk AVB:
Pasang devicetree lebih awal, VBoot 2.0
Konfigurasi di devicetree untuk VBoot 2.0 sama dengan yang ada di VBoot 1.0, dengan pengecualian berikut:
fsmgr_flag
dialihkan dariverify
menjadiavb
.- Semua partisi dengan metadata AVB harus dalam entri VBMeta di
devicetree, bahkan saat partisi tidak dipasang lebih awal (misalnya,
/boot
).
Contoh: /sistem dan /vendor di N5X
Contoh berikut menunjukkan pemasangan awal devicetree untuk
Partisi system
dan vendor
di Nexus 5X. Perhatikan bahwa:
/system
terpasang dengan AVB dan/vendor
merupakan dipasang tanpa verifikasi integritas.- Karena Nexus 5X tidak memiliki partisi
/vbmeta
, sehingga tingkat atas vbmeta berada di akhir partisi/boot
(untuk detailnya, lihat Daftar perubahan AOSP)./ { firmware { android { compatible = "android,firmware"; vbmeta { compatible = "android,vbmeta"; parts = "boot,system,vendor"; }; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,avb"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
Contoh: /vendor di Pixel
Contoh berikut menunjukkan pemasangan /vendor
lebih awal di Pixel.
Perhatikan bahwa:
- Partisi yang ditentukan dalam entri vbmeta lebih banyak karena partisi tersebut adalah dilindungi oleh AVB.
- Semua partisi AVB harus disertakan, meskipun hanya
/vendor
yang dipasang lebih awal. - Jangan lupa menambahkan
slotselect
untuk partisi yang tunduk pada A/B./ { vbmeta { compatible = "android,vbmeta"; parts = "vbmeta,boot,system,vendor,dtbo"; }; firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,avb"; }; }; }; }; };