Android 10 incluye compatibilidad para crear particiones odm mediante el sistema de compilación de Android.
Acerca de las particiones ODM
Los fabricantes de diseño original (ODM) personalizan los paquetes de soporte de placa (BSP) del proveedor de sistema en chip (SoC) para sus dispositivos específicos (sus placas). Esto les permite implementar módulos kernel para componentes específicos de la placa, demonios específicos de la placa o sus propias características en capas de abstracción de hardware (HAL). Es posible que también deseen reemplazar o personalizar los componentes de SoC.
En versiones anteriores de Android, tales personalizaciones impedían el uso de una imagen de proveedor único para dispositivos con el mismo SoC (o con diferentes SoC, pero de la misma familia). En Android 10 y versiones posteriores, puede usar una partición odm separada para las personalizaciones, lo que le permite usar una sola imagen de proveedor para varias SKU de hardware.
Uso de particiones de producto y ODM
Android 9 agregó compatibilidad para crear particiones de product , lo que permite el uso de una sola imagen del sistema para varias SKU de software proporcionadas por diferentes imágenes product.img . Mientras que la partición del product está diseñada para SKU de software, la partición odm está diseñada para SKU de hardware.
Con particiones ODM y productos dedicados, puede usar la partición del system para alojar código genérico para compartir entre muchas SKU de software, y la partición del vendor para alojar código BSP específico de SoC para compartir entre varios dispositivos según el SoC dado.
El uso de particiones separadas tiene desventajas, como la dificultad para administrar el espacio en disco (por ejemplo, debe reservar una cantidad limitada de espacio para el crecimiento futuro). Sin embargo, la compatibilidad con Android 10 para particiones dinámicas elimina el problema del disco y hace posible volver a particionar un dispositivo durante una actualización inalámbrica (OTA) .
Componentes ODM
La partición odm contiene los siguientes componentes específicos de ODM (similares a la partición del vendor ), enumerados en la siguiente tabla.
| Componente específico de ODM | Ubicación |
|---|---|
| Módulos de kernel cargables (LKM) | /odm/lib/modules/*.ko |
| bibliotecas nativas | /odm/lib[64] |
| HAL | /odm/lib[64]/hw |
| SEPolítica | /odm/etc/selinux |
| Datos del objeto VINTF | /odm/etc/vintf |
archivos init.rc | /odm/etc/init |
| Propiedades del sistema | /odm/build.prop |
| Superposiciones de recursos de tiempo de ejecución (RRO) | /odm/overlay/*.apk |
| aplicaciones | /odm/app/*.apk |
| Priv-aplicaciones | /odm/priv-app/*.apk |
| Bibliotecas de Java | /odm/framework/*.jar |
| Configuraciones del sistema Android Framework | /odm/etc/sysconfig/* y /odm/etc/permissions/* |
Sin imágenes personalizadas
No use imágenes personalizadas porque no son compatibles con lo siguiente:
- Instalación de un módulo a un objetivo específico. Las imágenes personalizadas admiten la copia de artefactos en una imagen, pero no pueden instalar un módulo en una partición específica especificando la partición de destino como parte de una regla de compilación.
- pronto.
custom_imagesno se puede construir usando el sistema de construcción Soong. - Actualización OTA. Las imágenes personalizadas se utilizan como imágenes ROM de fábrica que no se pueden editar mediante OTA.
Mantenimiento de ABI entre particiones
La partición odm es una extensión de la partición del vendor . Al considerar la estabilidad de la interfaz binaria de la aplicación (ABI), tenga en cuenta la siguiente arquitectura.

- No hay estabilidad ABI entre las particiones
odmyvendor. Ambas particiones deben actualizarse al mismo tiempo. - Las particiones
odmy devendorpueden depender una de la otra, pero la partición devendordebe funcionar sin una particiónodm. - La ABI entre el
odmy elsystemes la misma que la ABI entre elvendory elsystem.
No se permite la interacción directa entre la partición del product y la partición del vendor o del odm . (Esto es aplicado por SEpolicy.)
Implementación de particiones ODM
Antes de implementar una nueva partición, revise los cambios de AOSP relacionados .
Configuración de particiones ODM
Para configurar particiones odm , incluya estos indicadores de compilación:
-
BOARD_ODMIMAGE_PARTITION_SIZEpara un tamaño de partición fijo -
PRODUCT_USE_DYNAMIC_PARTITIONSyBOARD_ODMIMAGE_PARTITION_RESERVED_SIZEpara un tamaño de partición dinámico -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPEtipo de sistema de archivos utilizado para la imagen ODM -
PRODUCT_ODM_PROPERTIESpara/odm/build.proppara usar dentro de$(call inherit-product path/to/device.mk), como enPRODUCT_ODM_PROPERTIES += product.abc=ok
Instalación de un módulo en una partición ODM
Use estos indicadores de compilación para instalar un módulo en una partición odm :
-
device_specific: trueenAndroid.bp -
LOCAL_ODM_MODULE := trueenAndroid.mk
Habilitación del arranque verificado
Para evitar que el software malicioso manipule las particiones odm , habilite Android Verified Boot (AVB) para esas particiones (al igual que lo hace con las particiones del vendor y system ).
Para habilitar AVB, incluya el indicador de compilación BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS . Para obtener detalles sobre la configuración de AVB en particiones dinámicas, consulte Cambios en la configuración de AVB .
Tratar /odm como otra partición /proveedor
Para garantizar que el sistema maneje la partición odm como una partición de vendor , reemplace cualquier referencia de vendor codificada de forma rígida con un conjunto de particiones orientadas al hardware (actualmente odm y vendor ). Las ubicaciones de referencia de vendor notables en la plataforma incluyen el enlazador dinámico , el administrador de paquetes y shell/libc .