Particiones ODM

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.

Cómo mantener la ABI entre particiones

Figura 1: Mantener la ABI entre particiones

  • No hay estabilidad de ABI entre las particiones odm y vendor. Ambas particiones deben actualizarse al mismo tiempo.
  • Las particiones odm y vendor pueden depender entre sí, pero la partición vendor debe funcionar sin una partición odm.
  • La ABI entre odm y system es la misma que la ABI entre vendor y system.

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