Android 10 est compatible avec la création de partitions odm
à l'aide du système de compilation Android.
À propos des partitions ODM
Les fabricants de concept d'origine (ODM) personnalisent les packages de prise en charge de carte (BSP) des fournisseurs de SoC (System on Chip) en fonction de leurs appareils spécifiques (leurs cartes). Cela leur permet d'implémenter des modules de kernel pour les composants spécifiques à la carte, les daemons spécifiques à la carte ou leurs propres fonctionnalités sur les couches d'abstraction matérielle (HAL). Il peut également vouloir remplacer ou personnaliser des composants de SoC.
Dans les versions antérieures d'Android, ces personnalisations empêchaient l'utilisation d'une seule image du fournisseur 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 du fournisseur pour plusieurs SKU matériels.
Utiliser des partitions de produits et d'OEM
Android 9 a ajouté la prise en charge de la création de partitions product
, ce qui permet d'utiliser une seule image système pour plusieurs SKU logiciels fournis par différentes images product.img
. Alors que la partition product
est destinée aux codes SKU logiciels, la partition odm
est destinée aux codes SKU matériels.
Avec des partitions de produit et d'ODM dédiées, vous pouvez utiliser la partition system
pour héberger du code générique à partager entre de nombreux SKU logiciels, et la partition vendor
pour héberger du code BSP spécifique au SoC à partager entre plusieurs appareils en fonction du SoC donné.
L'utilisation de partitions distinctes 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). Toutefois, la prise en charge des partitions dynamiques par Android 10 élimine le problème de disque et permet de redéfinir la partition d'un appareil lors d'une mise à jour Over The Air (OTA).
Composants ODM
La partition odm
contient les composants spécifiques à l'ODM suivants (comme la partition vendor
), listés dans le tableau suivant.
Composant spécifique à l'OEM | Position |
---|---|
Modules de noyau chargeables (LKM) | /odm/lib/modules/*.ko |
Bibliothèques natives | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
Données d'objet VINTF | /odm/etc/vintf |
Fichiers init.rc |
/odm/etc/init |
Propriétés système | /odm/build.prop |
Superpositions de ressources d'exécution (RRO) | /odm/overlay/*.apk |
Applis | /odm/app/*.apk |
Priv-apps | /odm/priv-app/*.apk |
Bibliothèques Java | /odm/framework/*.jar |
Configurations système du framework Android | /odm/etc/sysconfig/* et /odm/etc/permissions/* |
Aucune image personnalisée
N'utilisez pas d'images personnalisées, car elles ne sont pas compatibles avec les éléments suivants:
- Installation d'un module sur une cible spécifique. Les images personnalisées permettent de copier des artefacts dans une image, mais ne peuvent pas installer de module dans une partition spécifique en spécifiant la partition cible dans le cadre d'une règle de compilation.
- Soong.
custom_images
ne peut pas être généré à l'aide du système de compilation Soong. - Mise à jour OTA. Les images personnalisées sont utilisées comme images ROM d'usine qui ne peuvent pas être mises à jour par OTA.
Gérer les ABI entre les partitions
La partition odm
est une extension de la partition vendor
. Lorsque vous réfléchissez à la stabilité de l'interface binaire d'application (ABI), tenez compte de l'architecture suivante.

Figure 1 : Maintien de l'ABI entre les partitions.
- 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 identique à l'ABI entrevendor
etsystem
.
L'interaction directe entre la partition product
et la partition vendor
ou odm
n'est pas autorisée. (Cette mesure est appliquée par SEpolicy.)
Implémenter des partitions ODM
Avant d'implémenter une nouvelle partition, consultez les modifications AOSP associées.
Configurer des partitions ODM
Pour configurer des partitions odm
, incluez les options de compilation suivantes:
BOARD_ODMIMAGE_PARTITION_SIZE
pour une taille de partition fixePRODUCT_USE_DYNAMIC_PARTITIONS
etBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
pour une taille de partition dynamique- Type de système de fichiers
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
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
Installer un module dans une partition ODM
Utilisez ces options de compilation pour installer un module dans une partition odm
:
device_specific: true
enAndroid.bp
LOCAL_ODM_MODULE := true
enAndroid.mk
Activer le démarrage validé
Pour empêcher les logiciels malveillants de falsifier les partitions odm
, activez le démarrage validé Android (AVB) pour ces partitions (comme vous le faites pour les partitions vendor
et system
).
Pour activer l'AVB, incluez l'indicateur de compilation BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Pour en savoir plus sur la configuration d'AVB sur des partitions dynamiques, consultez la section Modifications de configuration AVB.
Traiter /odm comme une autre partition /vendor
Pour vous assurer 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 de la plate-forme incluent le lecteur de liens dynamique, le gestionnaire de paquets et shell/libc
.