Android 10 inclut la prise en charge de la création de partitions odm
à l'aide du système de construction Android.
À propos des partitions ODM
Les fabricants de conception originale (ODM) personnalisent les packages de support de carte (BSP) des fournisseurs de systèmes sur puce (SoC) en fonction de leurs appareils spécifiques (leurs cartes). Cela leur permet d'implémenter des modules de noyau pour des composants spécifiques à la carte, des démons spécifiques à la carte ou leurs propres fonctionnalités sur les couches d'abstraction matérielle (HAL). Ils voudront peut-être également remplacer ou personnaliser les composants du SoC.
Dans les versions inférieures d'Android, de telles personnalisations empêchaient l'utilisation d'une image de fournisseur unique pour les appareils dotés du même SoC (ou de SoC différents, mais de la même famille). Sous Android 10 et versions ultérieures, vous pouvez utiliser une partition odm
distincte pour les personnalisations, ce qui vous permet d'utiliser une seule image de fournisseur pour plusieurs SKU matériels.
Utilisation des partitions de produit et ODM
Android 9 a ajouté la prise en charge de la création de partitions product
, permettant l'utilisation d'une seule image système pour plusieurs SKU de logiciels fournis par différentes images product.img
. Alors que la partition product
est destinée aux SKU de logiciels, la partition odm
est destinée aux SKU de matériel.
Avec des partitions produit et ODM dédiées, vous pouvez utiliser la partition system
pour héberger le code générique à partager entre de nombreux SKU de logiciels, et la partition vendor
pour héberger le code BSP spécifique au SoC à partager entre plusieurs appareils en fonction du SoC donné.
L'utilisation de partitions séparées présente des inconvénients, tels que la difficulté de gérer l'espace disque (par exemple, vous devez réserver une quantité limitée d'espace pour une croissance future). Cependant, la prise en charge d'Android 10 pour les partitions dynamiques supprime le problème de disque et permet de repartitionner un appareil lors d'une mise à jour en direct (OTA) .
Composants ODM
La partition odm
contient les composants spécifiques à ODM suivants (similaires à la partition vendor
), répertoriés dans le tableau suivant.
Composant spécifique à ODM | Emplacement |
---|---|
Modules de noyau chargeables (LKM) | /odm/lib/modules/*.ko |
Bibliothèques natives | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
Politique SE | /odm/etc/selinux |
Données de l'objet VINTF | /odm/etc/vintf |
fichiers init.rc | /odm/etc/init |
Propriétés du système | /odm/build.prop |
Superpositions de ressources d'exécution (RRO) | /odm/overlay/*.apk |
applications | /odm/app/*.apk |
Applications privées | /odm/priv-app/*.apk |
Bibliothèques Java | /odm/framework/*.jar |
Configurations du système Android Framework | /odm/etc/sysconfig/* et /odm/etc/permissions/* |
Aucune image personnalisée
N'utilisez pas d'images personnalisées , car elles ne prennent pas en charge les éléments suivants :
- Installation d'un module sur une cible spécifique. Les images personnalisées prennent en charge la copie d'artefacts dans une image, mais ne peuvent pas installer un module dans une partition spécifique en spécifiant la partition cible dans le cadre d'une règle de construction.
- Bientôt.
custom_images
ne peut pas être construit à l'aide du système de construction Soong. - Mise à jour OTA. Les images personnalisées sont utilisées comme images ROM d'usine qui ne peuvent pas être éditées en OTA.
Maintenir les ABI entre les partitions
La partition odm
est une extension de la partition vendor
. Lorsque vous envisagez la stabilité de l’interface binaire d’application (ABI), gardez l’architecture suivante à l’esprit.
- Il n'y a pas de stabilité ABI entre les partitions
odm
etvendor
. Les deux partitions doivent être mises à niveau en même temps. - Les partitions
odm
etvendor
peuvent dépendre l'une de l'autre, mais la partitionvendor
doit fonctionner sans partitionodm
. - L'ABI entre
odm
etsystem
est le même que l'ABI entrevendor
etsystem
.
L'interaction directe entre la partition product
et la partition du vendor
ou odm
n'est pas autorisée . (Ceci est appliqué par SEpolicy.)
Implémentation de partitions ODM
Avant d'implémenter une nouvelle partition, examinez les modifications AOSP associées .
Configuration des partitions ODM
Pour configurer des partitions odm
, incluez ces indicateurs de build :
-
BOARD_ODMIMAGE_PARTITION_SIZE
pour une taille de partition fixe -
PRODUCT_USE_DYNAMIC_PARTITIONS
etBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
pour une taille de partition dynamique -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
type de système de fichiers utilisé pour l'image ODM -
PRODUCT_ODM_PROPERTIES
pour/odm/build.prop
à utiliser dans un$(call inherit-product path/to/device.mk)
, comme dansPRODUCT_ODM_PROPERTIES += product.abc=ok
Installation d'un module sur une partition ODM
Utilisez ces indicateurs de build pour installer un module sur une partition odm
:
-
device_specific: true
dansAndroid.bp
-
LOCAL_ODM_MODULE := true
dansAndroid.mk
Activation du démarrage vérifié
Pour empêcher les logiciels malveillants de falsifier les partitions odm
, activez Android Verified Boot (AVB) pour ces partitions (tout comme vous le faites pour les partitions vendor
et system
).
Pour activer AVB, incluez l'indicateur de build BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Pour plus de détails sur la configuration d'AVB sur des partitions dynamiques, consultez Modifications de la configuration AVB .
Traiter /odm comme une autre partition /vendor
Pour garantir que le système gère la partition odm
en tant que partition vendor
, remplacez toutes les références vendor
codées en dur par un ensemble de partitions orientées matériel (actuellement odm
et vendor
). Les emplacements de référence vendor
notables sur la plate-forme incluent l'éditeur de liens dynamique , le gestionnaire de packages et shell/libc
.