Partitions ODM

Android 10 prend en charge la compilation Partitions odm à l'aide du système de compilation Android.

À propos des partitions ODM

Les fabricants de conceptions originales (ODM) personnalisent le fournisseur système sur puce (SoC) à leurs appareils spécifiques (leurs cartes). Ce leur permet d’implémenter des modules de noyau pour des composants spécifiques à une carte, daemons spécifiques à une carte ou leurs propres caractéristiques sur les couches d'abstraction matérielle (HAL). Il peut également vouloir remplacer ou personnaliser les composants du SoC.

Dans les versions antérieures d'Android, ces personnalisations empêchaient l'utilisation image du fournisseur pour les appareils dotés du même SoC (ou de différents SoC, mais situés dans de la même famille). Sur Android 10 ou version ultérieure, vous pouvez utiliser un une partition odm distincte à des fins de personnalisation, ce qui vous permet de utiliser une image de fournisseur unique pour plusieurs SKU de matériel.

Utiliser les partitions produit et ODM

Android 9 prend désormais en charge la compilation product partitions, ce qui permet d'utiliser une seule image système pour plusieurs logiciels SKU fournis par différentes images product.img. Alors que le La partition product est destinée aux SKU La partition odm est destinée aux SKU matériels.

Avec les partitions dédiées aux produits et ODM, vous pouvez utiliser system pour héberger un code générique à partager entre de nombreux SKU. Partition vendor pour héberger le code BSP spécifique au SoC à partager plusieurs appareils selon le SoC donné.

L'utilisation de partitions distinctes présente des inconvénients, tels que la difficulté à gérer d'espace disque (par exemple, vous devez réserver un espace limité pour des opérations ultérieures de croissance). Cependant, la prise en charge d'Android 10 pour partitions dynamiques supprime le problème de disque et facilite le repartitionnement d'un périphérique lors d'une Mise à jour Over The Air (OTA) possible.

Composants ODM

La partition odm contient les composants ODM suivants : (semblable à la partition vendor), répertoriés dans le tableau suivant.

Composant spécifique à l'ODM Position
Modules de noyau chargeables (LKM) /odm/lib/modules/*.ko
Bibliothèques natives /odm/lib[64]
HAL /odm/lib[64]/hw
Stratégie SE /odm/etc/selinux
Objet VINTF données /odm/etc/vintf
init.rc fichiers /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
Applications privées /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

Ne pas utiliser personnalisé images, 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 pas installer un module dans une partition spécifique en spécifiant la partition cible dans une règle de compilation.
  • Son ! custom_images ne peut pas être compilé avec le système de compilation Soong.
  • Mise à jour OTA. Les images personnalisées sont utilisées des images ROM d'usine qui ne peuvent pas être OTA-ed.

Conserver les ABI entre les partitions

La partition odm est une extension de vendor. partition. Lorsque vous étudiez la stabilité de l'interface binaire (ABI) d'application, l'architecture suivante à l'esprit.

Maintenir l'ABI entre les partitions

Figure 1 : Maintenir l'ABI entre les partitions.

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

Interaction directe entre la partition product et la La partition vendor ou odm n'est pas autorisé. (Cette règle est appliquée par SEpolicy.)

Implémenter des partitions ODM

Avant d'implémenter une nouvelle partition, consultez le AOSP associé modifications.

Configurer des partitions ODM

Pour configurer des partitions odm, incluez ces options de compilation:

  • BOARD_ODMIMAGE_PARTITION_SIZE pour une taille de partition fixe
  • PRODUCT_USE_DYNAMIC_PARTITIONS et BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE pour partition dynamique taille [size]
  • Type de système de fichiers BOARD_ODMIMAGE_FILE_SYSTEM_TYPE utilisé pour Image ODM
  • PRODUCT_ODM_PROPERTIES à /odm/build.prop pour 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 sur 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 manipuler les partitions odm, activer le démarrage validé Android (AVB) pour ces partitions (tout comme vous le faites pour vendor et system partitions).

Pour activer AVB, incluez l'indicateur de compilation BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS Pour savoir comment configurer AVB sur les partitions dynamiques, voir Configuration AVB modifications.

Traiter /odm comme une autre partition /vendor

Pour garantir que le système gère la partition odm en tant que la partition vendor, remplacez toutes les vendor codées en dur. avec un ensemble de partitions orientées matériel (actuellement odm et vendor). vendor à retenir emplacements de référence sur la plate-forme incluent dynamique éditeur de liens, colis manager et shell/libc.