Les appareils compatibles avec Treble doivent activer le premier étage d'installation pour s'assurer
init
peut charger des applications Security-Enhanced Linux
(SELinux) répartis entre system
et
vendor
partitions. Cet accès permet aussi de charger le noyau
modules dès que possible après le démarrage du noyau.
Pour effectuer un montage anticipé, Android doit avoir accès aux systèmes de fichiers sur
qui hébergent les modules. Android 8.0 ou version ultérieure est compatible avec
/system
, /vendor
ou /odm
dès le
Première étape de init
(c'est-à-dire avant l'initialisation de SElinux).
Entrées fstab
Sous Android 9 ou version antérieure, les appareils peuvent spécifier des entrées fstab
pour
partitions installées de façon anticipée à l'aide de l'arborescence de périphériques
superpositions. Sur Android 10 et versions ultérieures,
les appareils doivent spécifier les entrées fstab
pour les partitions installées de façon anticipée
en utilisant un fichier fstab
lors de la première étape
ramdisk. Android
10 introduit les options fs_mgr
suivantes
à utiliser dans le fichier fstab
:
first_stage_mount
indique qu'une partition est installée à la première étape de l'initialisation.logical
indique qu'il s'agit d'un partition dynamique.avb=vbmeta-partition-name
spécifie la partitionvbmeta
. La première étape initialise cette partition avant de monter d'autres partitions. L'argument de cet indicateur peut être omis si la partitionvbmeta
de l'entrée a déjà été spécifiée par une autre entréefstab
dans une ligne précédente.
L'exemple suivant montre des entrées fstab
pour définir le
Partitions system
, vendor
et product
sous forme de partitions logiques (dynamiques).
#<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
Dans cet exemple, le fournisseur spécifie la partition vbmeta
à l'aide de
l'indicateur fs_mgr
avb=vbmeta
, mais product
omet l'argument vbmeta
, car le fournisseur a déjà ajouté
vbmeta
à la liste des partitions.
Les appareils équipés d'Android 10 ou version ultérieure doivent placer le
fstab
dans le ramdisk et dans vendor
partition.
Disque RAM
L'emplacement du fichier fstab
dans ramdisk dépend de la façon dont un appareil
utilise ramdisk.
Les appareils dotés d'un disque RAM de démarrage doivent placer l'fstab
à la racine ramdisk de démarrage. Si l'appareil dispose à la fois d'un ramdisk de démarrage et d'un
aucune modification
n'est requise sur le ramdisk de récupération. Exemple :
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
Les appareils utilisant la récupération en tant que ramdisk doivent utiliser la
le paramètre de ligne de commande du noyau androidboot.force_normal_boot=1
à
décider de démarrer sur Android ou de
continuer à démarrer avec la récupération. Appareils
Lancer avec Android 12 ou version ultérieure avec
version 5.10 ou ultérieure du noyau doit utiliser bootconfig pour transmettre le
Paramètre androidboot.force_normal_boot=1
. Dans
sur ces appareils, la première étape init effectue
une opération switch à la racine
/first_stage_ramdisk
avant d'installer les partitions d'installation anticipée
Les appareils doivent donc placer le fichier fstab
$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
Exemple :
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
Fournisseur
Tous les appareils doivent placer une copie du fichier fstab
dans
/vendor/etc
En effet, la première étape init libère
ramdisk après avoir installé tôt les partitions et effectué une
basculez sur l'opération racine pour déplacer le montage sur /system
vers
/
Toute opération ultérieure nécessitant d'accéder à fstab
doivent donc utiliser la copie dans /vendor/etc
. Exemple :
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
Installer des partitions de manière anticipée, VBoot 1.0
Les conditions requises pour l'installation anticipée de partitions avec VBoot 1.0 incluent les éléments suivants:
- Les chemins d'accès des nœuds de l'appareil doivent utiliser leurs liens symboliques
by-name
dansfstab
et les entrées devicetree. Par exemple, au lieu de spécifier partitions à l'aide de/dev/block/mmcblk0pX
, assurez-vous qu'elles sont et que le nœud de l'appareil est/dev/block/…./by-name/{system,vendor,odm}
- Chemins d'accès fournis pour
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
etCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
dans la configuration de l'appareil pour le produit (c'est-à-dire,device/oem/project/device.mk
) doit correspondre à nœuds d'appareil de stockage en mode bloc correspondants spécifiésby-name
dansfstab
/devicetree. Exemple: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
- Les entrées fournies via des superpositions d'arborescence de périphériques ne doivent pas être répétées dans les
fstab
fragments de fichiers. Par exemple, si vous spécifiez une entrée installer/vendor
dans l'arborescence des appareils, le fichierfstab
ne doit pas répéter cette entrée. - Les partitions nécessitant
verifyatboot
ne doivent pas être installé en avance (cela n'est pas pris en charge). - Le mode et l'état de vérification des partitions validées doivent être spécifiés dans
kernel_cmdline
avec l'optionandroidboot.veritymode
(exigence existante).
Installer l'arborescence de périphériques à un stade précoce, VBoot 1.0
Dans Android 8.x et versions ultérieures, init
analyse l'arborescence de l'appareil et
crée des entrées fstab
pour installer la partition de manière anticipée
la première étape. Une entrée fstab
se présente sous la forme suivante:
src mnt_point type mnt_flags fs_mgr_flags
Les propriétés Devicetree sont définies pour imiter ce format:
fstab
entrées doivent être inférieures à/firmware/android/fstab
dans l'arborescence des appareils et doit avoir un élément chaîne compatible définie surandroid,fstab
.- Chaque nœud sous
/firmware/android/fstab
est traité comme une seule entrée d'installation anticipée (fstab
). Un nœud doit disposer des éléments suivants : définies: <ph type="x-smartling-placeholder">- </ph>
dev
doit pointer vers le nœud d'appareil représentant le partitionby-name
type
doit être le type du système de fichiers (comme dansfstab
fichiers)mnt_flags
doit être la liste des indicateurs d'installation séparés par une virgule (comme dans les fichiersfstab
)fsmgr_flags
doit correspondre à la liste d'Androidfs_mgr flags
(comme dans les fichiersfstab
).
- Les partitions A/B doivent avoir une option
slotselect fs_mgr
. - Les partitions pour lesquelles dm-verity est activé doivent avoir un
verify fs_mgr
.
Exemple: /system et /vendor sur N6P
L'exemple suivant illustre l'installation anticipée de devicetree pour system
et vendor
sur le 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"; }; }; }; }; };
Exemple: /vendor sur Pixel
L'exemple suivant illustre l'installation anticipée de devicetree pour /vendor
sur le Pixel (n'oubliez pas d'ajouter slotselect
pour les partitions soumises à
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"; }; }; }; }; };
Installer des partitions de manière anticipée, VBoot 2.0
VBoot 2.0 est le démarrage validé Android (AVB). Les conditions requises pour sont les suivantes:
- Les chemins d'accès des nœuds de l'appareil doivent utiliser leurs liens symboliques
by-name
dansfstab
et les entrées devicetree. Par exemple, au lieu de spécifier partitions à l'aide de/dev/block/mmcblk0pX
, assurez-vous qu'elles sont nommées et le nœud de l'appareil/dev/block/…./by-name/{system,vendor,odm}
- Les variables système de compilation (telles que
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
etCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) utilisés pour VBoot 1.0 ne sont PAS requise pour VBoot 2.0. À la place, les variables de compilation introduites dans VBoot 2.0 (y comprisBOARD_AVB_ENABLE := true
) doit être défini. pendant configuration complète, reportez-vous Créer une intégration système pour AVB - Les entrées fournies via des superpositions d'arborescence de périphériques ne doivent pas être répétées dans les
fstab
fragments de fichiers. Par exemple, si vous spécifiez une entrée pour installer/vendor
dans l'arborescence des appareils, le fichierfstab
ne doit pas répéter cette entrée. - VBoot 2.0 n'est pas compatible avec
verifyatboot
, qu'il s'agisse d'une installation anticipée est activé ou non. - Le mode et l'état de vérification des partitions validées doivent être spécifiés dans
kernel_cmdline
avecandroidboot.veritymode
(exigence existante). Assurez-vous d'inclure les correctifs suivants pour AVB: <ph type="x-smartling-placeholder">
Installer l'arborescence de périphériques à un stade précoce, VBoot 2.0
La configuration de l'arborescence des appareils pour VBoot 2.0 est la même que celle de VBoot 1.0, avec le les exceptions suivantes:
- L'appareil
fsmgr_flag
est passé deverify
àavb
- Toutes les partitions avec des métadonnées AVB doivent figurer dans l'entrée VBMeta du
devicetree, même lorsque la partition n'est pas installée en avance (par exemple,
/boot
).
Exemple: /system et /vendor sur N5X
L'exemple suivant illustre un montage anticipé de l'arborescence de périphériques pour le
Partitions system
et vendor
sur le Nexus 5X. Gardez à l'esprit les points suivants :
/system
est installé avec AVB et/vendor
est installé monté sans vérification de l'intégrité.- Comme le Nexus 5X n'a pas de partition
/vbmeta
, les partitions de premier niveau vbmeta se trouve à la fin de la partition/boot
(pour en savoir plus, reportez-vous à la liste de modifications 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"; }; }; }; }; };
Exemple: /vendor sur Pixel
L'exemple suivant montre comment installer /vendor
de manière anticipée sur un Pixel.
Gardez à l'esprit les points suivants :
- Davantage de partitions sont spécifiées dans l'entrée vbmeta, car ces partitions sont protégés par AVB.
- Toutes les partitions AVB doivent être incluses, même si seule
/vendor
est montés tôt. - N'oubliez pas d'ajouter
slotselect
pour les partitions soumises à 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"; }; }; }; }; };