Android 10 admite la compilación de particiones odm
con el sistema de compilación de Android.
Información acerca de las particiones ODM
Los fabricantes de diseño original (ODM) personalizan los paquetes de asistencia de placa (BSP) del proveedor del sistema en chip (SoC) para sus dispositivos específicos (sus placas). Esto les permite implementar módulos de kernel para componentes específicos de la placa, daemons específicos de la placa o sus propias funciones en capas de abstracción de hardware (HAL). También puede reemplazar o personalizar componentes del SoC.
En versiones anteriores de Android, esas personalizaciones impedían el uso de una sola imagen del proveedor para dispositivos con el mismo SoC (o con SoCs diferentes, pero de la misma familia). En Android 10 y versiones posteriores, puedes usar una partición odm
separada para las personalizaciones, lo que te permite usar una sola imagen de proveedor para múltiples SKU de hardware.
Usa particiones de productos y ODM
Android 9 agregó compatibilidad con la compilación de particiones product
, lo que permite usar una sola imagen del sistema para varios SKU de software que proporcionan diferentes imágenes product.img
. Mientras que la partición product
está destinada a los SKU de software, la partición odm
está destinada a los SKU de hardware.
Con particiones de productos y ODM dedicadas, puedes usar la partición system
para alojar código genérico y compartirlo entre muchos SKU de software, y la partición vendor
para alojar código BSP específico del SoC y compartirlo entre varios dispositivos según el SoC determinado.
El uso de particiones separadas tiene desventajas, como la dificultad para administrar el espacio en el disco (por ejemplo, debes reservar una cantidad limitada de espacio para el crecimiento futuro). Sin embargo, la compatibilidad de Android 10 con las particiones dinámicas quita el problema del disco y permite volver a particionar un dispositivo durante una actualización inalámbrica (OTA).
Componentes de ODM
La partición odm
contiene los siguientes componentes específicos del ODM (similares a la partición vendor
), que se enumeran en la siguiente tabla.
Componente específico del ODM | Ubicación |
---|---|
Módulos de kernel cargables (LKM) | /odm/lib/modules/*.ko |
Bibliotecas nativas | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
Datos de objetos de VINTF | /odm/etc/vintf |
Archivos init.rc |
/odm/etc/init |
Propiedades del sistema | /odm/build.prop |
Superposiciones de recursos en tiempo de ejecución (RRO) | /odm/overlay/*.apk |
Apps | /odm/app/*.apk |
Priv-apps | /odm/priv-app/*.apk |
Bibliotecas de Java | /odm/framework/*.jar |
Parámetros de configuración del sistema del framework de Android | /odm/etc/sysconfig/* y /odm/etc/permissions/* |
No hay imágenes personalizadas
No uses imágenes personalizadas porque no son compatibles con lo siguiente:
- Instalación de un módulo en un destino 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.
- Soong.
custom_images
no se puede compilar con el sistema de compilación Soong. - Actualización OTA. Las imágenes personalizadas se usan como imágenes de ROM de fábrica que no se pueden actualizar por OTA.
Mantén las ABI entre particiones
La partición odm
es una extensión de la partición vendor
. Cuando consideres la estabilidad de la interfaz binaria de la aplicación (ABI), ten en cuenta la siguiente arquitectura.

Figura 1: Mantener la ABI entre particiones
- No hay estabilidad de ABI entre las particiones
odm
yvendor
. Ambas particiones deben actualizarse al mismo tiempo. - Las particiones
odm
yvendor
pueden depender entre sí, pero la particiónvendor
debe funcionar sin una particiónodm
. - La ABI entre
odm
ysystem
es la misma que la ABI entrevendor
ysystem
.
No se permite la interacción directa entre la partición product
y la partición vendor
o odm
. (SEpolicy aplica esta restricción).
Cómo implementar particiones ODM
Antes de implementar una partición nueva, revisa los cambios relacionados de AOSP.
Cómo configurar particiones ODM
Para configurar particiones odm
, incluye estas marcas de compilación:
BOARD_ODMIMAGE_PARTITION_SIZE
para un tamaño de partición fijoPRODUCT_USE_DYNAMIC_PARTITIONS
yBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
para un tamaño de partición dinámica- Tipo de sistema de archivos
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
que se usa para la imagen de ODM PRODUCT_ODM_PROPERTIES
para/odm/build.prop
para su uso dentro de un$(call inherit-product path/to/device.mk)
, como enPRODUCT_ODM_PROPERTIES += product.abc=ok
Cómo instalar un módulo en una partición de ODM
Usa estas marcas de compilación para instalar un módulo en una partición odm
:
device_specific: true
enAndroid.bp
LOCAL_ODM_MODULE := true
enAndroid.mk
Habilita el inicio verificado
Para evitar que el software malicioso manipule las particiones odm
, habilita el inicio verificado de Android (AVB) para esas particiones (al igual que lo haces para las particiones vendor
y system
).
Para habilitar AVB, incluye la marca de compilación BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Para obtener detalles sobre la configuración de AVB en particiones dinámicas, consulta Cambios en la configuración de AVB.
Trata /odm como otra partición /vendor
Para garantizar que el sistema controle la partición odm
como una partición vendor
, reemplaza las referencias vendor
hard-coded por un conjunto de particiones orientadas al hardware (actualmente, odm
y vendor
). Entre las ubicaciones de referencia vendor
notables de la plataforma, se incluyen el vinculador dinámico, el administrador de paquetes y shell/libc
.