Partitions ODM

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.

Maintenir 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 le même que l'ABI entre vendor et system .

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