Android 10 incluye soporte para crear particiones odm
utilizando el sistema de compilación de Android.
Acerca de las particiones ODM
Los fabricantes de diseños originales (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 del 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 quieran reemplazar o personalizar los componentes del SoC.
En versiones inferiores de Android, dichas personalizaciones impedían el uso de una única imagen de proveedor para dispositivos con el mismo SoC (o con diferentes SoC, pero en la misma familia). En Android 10 y versiones posteriores, puede usar una partición odm
separada para personalizaciones, lo que le permite usar una única imagen de proveedor para múltiples SKU de hardware.
Uso de particiones de producto y ODM
Android 9 agregó soporte para crear particiones product
, lo que permite el uso de una única imagen del sistema para múltiples SKU de software proporcionadas por diferentes imágenes product.img
. Mientras que la partición product
está destinada a SKU de software, la partición odm
está destinada a SKU de hardware.
Con particiones ODM y de productos dedicados, puede usar la partición system
para alojar código genérico para compartir entre muchos SKU de software, y la partición del vendor
para alojar código BSP específico de SoC para compartir entre múltiples dispositivos según el SoC determinado.
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 un crecimiento futuro). Sin embargo, la compatibilidad de Android 10 con 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
), que se enumeran 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 |
Política SE | /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 en tiempo de ejecución (RRO) | /odm/overlay/*.apk |
Aplicaciones | /odm/app/*.apk |
aplicaciones privadas | /odm/priv-app/*.apk |
bibliotecas java | /odm/framework/*.jar |
Configuraciones del sistema Android Framework | /odm/etc/sysconfig/* y /odm/etc/permissions/* |
Sin imágenes personalizadas
No utilice imágenes personalizadas porque no son compatibles con lo siguiente:
- Instalación de un módulo para 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_images
no se puede crear con el sistema de compilación de Soong. - Actualización OTA. Las imágenes personalizadas se utilizan como imágenes ROM de fábrica que no se pueden editar mediante OTA.
Mantener 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
odm
yvendor
. Ambas particiones deben actualizarse al mismo tiempo. - Las particiones
odm
yvendor
pueden depender una de otra, 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 del vendor
o odm
. (Esto lo aplica SEpolicy).
Implementación de particiones ODM
Antes de implementar una nueva partición, revise los cambios de AOSP relacionados .
Configurar particiones ODM
Para configurar particiones odm
, incluya estos indicadores de compilación:
-
BOARD_ODMIMAGE_PARTITION_SIZE
para un tamaño de partición fijo -
PRODUCT_USE_DYNAMIC_PARTITIONS
yBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
para un tamaño de partición dinámica -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
tipo de sistema de archivos utilizado para la imagen ODM -
PRODUCT_ODM_PROPERTIES
para/odm/build.prop
para uso 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
Utilice estos indicadores de compilación para instalar un módulo en una partición odm
:
-
device_specific: true
enAndroid.bp
-
LOCAL_ODM_MODULE := true
enAndroid.mk
Habilitar el arranque verificado
Para evitar que el software malicioso altere las particiones odm
, habilite el arranque verificado de Android (AVB) para esas particiones (tal como lo hace para las particiones 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 de configuración de AVB .
Tratar /odm como otra partición /vendor
Para garantizar que el sistema maneje la partición odm
como una partición vendor
, reemplace cualquier referencia vendor
codificada con un conjunto de particiones orientadas al hardware (actualmente odm
y vendor
). Las ubicaciones de referencia vendor
notables en la plataforma incluyen el vinculador dinámico , el administrador de paquetes y shell/libc
.