Partitions ODM

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.

Maintenir l'ABI entre les partitions

Figure 1 : Maintien de l'ABI entre les partitions.

  • Il n'y a pas de stabilité ABI entre les partitions odm et vendor. Les deux partitions doivent être mises à niveau en même temps.
  • Les partitions odm et vendor peuvent dépendre l'une de l'autre, mais la partition vendor doit fonctionner sans partition odm.
  • L'ABI entre odm et system est identique à l'ABI entre vendor et system.

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 fixe
  • PRODUCT_USE_DYNAMIC_PARTITIONS et BOARD_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 dans PRODUCT_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 en Android.bp
  • LOCAL_ODM_MODULE := true en Android.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.