Particiones ODM

Android 10 admite la compilación Partición de odm con el sistema de compilación de Android.

Información acerca de las particiones ODM

Los fabricantes de diseño original (ODM) personalizan el proveedor de sistema en chip (SoC) paquetes de compatibilidad para placas (BSP) a sus dispositivos específicos (sus placas). Esta 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 es posible que quieras reemplazar o personalizar componentes del SoC.

En versiones anteriores de Android, esas personalizaciones impedían el uso de un solo imagen del proveedor para dispositivos con el mismo SoC (o con diferentes SoC, pero en el misma familia). En Android 10 y versiones posteriores, puedes usar un una partición de odm separada para personalizaciones, lo que te permite usar una sola imagen de proveedor para varios SKU de hardware.

Cómo usar particiones de productos y ODM

Android 9 agregó compatibilidad para compilar product particiones, lo que permite usar una sola imagen del sistema para varios software SKU proporcionados por diferentes imágenes de product.img. Si bien el product está pensada para SKU de software, el La partición odm está diseñada para SKU de hardware.

Con particiones dedicadas de producto y ODM, puedes usar el system para alojar un código genérico que se comparta entre muchos SKU de software, y las Partición vendor para alojar el código BSP específico del SoC para compartir varios dispositivos basados en el SoC determinado.

Usar particiones separadas tiene desventajas, como la dificultad de administrar espacio en disco (por ejemplo, debes reservar una cantidad limitada de espacio para futuras crecimiento). Sin embargo, la compatibilidad de Android 10 con particiones dinámicas elimina el problema del disco y facilita la repartición de un dispositivo durante una una actualización inalámbrica.

Componentes de ODM

La partición odm contiene los siguientes componentes específicos de ODM. (similar a la partición vendor), que se muestra en la siguiente tabla.

Componente específico de ODM Ubicación
Módulos de kernel cargables (LKMs) /odm/lib/modules/*.ko
Bibliotecas nativas /odm/lib[64]
HAL /odm/lib[64]/hw
Política de SE /odm/etc/selinux
Objeto VINTF datos /odm/etc/vintf
init.rc archivos /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
Apps de privilegios /odm/priv-app/*.apk
Bibliotecas 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 utilizar personalizado imágenes porque no admiten lo siguiente:

  • Instalación de un módulo para un destino específico. Las imágenes personalizadas permiten copiar artefactos en una imagen, pero no 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. No se puede compilar custom_images usando el sistema de compilación de Soong.
  • Actualización OTA. Las imágenes personalizadas se usan como imágenes de ROM de fábrica que no se pueden transmitir de forma inalámbrica.

Cómo mantener las ABI entre particiones

La partición odm es una extensión de vendor por cada partición. Cuando consideres la estabilidad de la interfaz binaria de la aplicación (ABI), mantén la siguiente arquitectura.

Cómo mantener las ABI entre particiones

Figura 1: Mantenimiento de la ABI entre particiones.

  • No hay estabilidad de ABI entre odm y vendor particiones. Ambas particiones se deben actualizar en la misma tiempo.
  • Las particiones odm y vendor pueden depender de 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.

Interacción directa entre la partición product y el La partición vendor o odm no es permitidos. (Esto se aplica según la política de SE).

Cómo implementar particiones ODM

Antes de implementar una partición nueva, revisa el AOSP relacionado de la configuración.

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 partición dinámica tamaño
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE que se usa para el Imagen ODM
  • PRODUCT_ODM_PROPERTIES por /odm/build.prop para usar dentro de un $(call inherit-product path/to/device.mk), como en PRODUCT_ODM_PROPERTIES += product.abc=ok

Instala un módulo en una partición 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

Habilitar el inicio verificado

Para evitar que software malicioso manipule las particiones de odm, habilitar el inicio verificado de Android (AVB) para esas particiones (tal como lo haces con 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 AVB en particiones dinámicas, consulta Configuración de AVB de la configuración.

Tratar /odm como otra partición /vendor

Para garantizar que el sistema controle la partición odm como una Partición de vendor, reemplaza cualquier vendor codificada de forma fija con un conjunto de particiones orientadas al hardware (actualmente, odm y vendor). Destacado vendor ubicaciones de referencia en la plataforma incluyen dinámica vinculador, paquete administrador y shell/libc.