Actualizaciones del sistema A/B

El SDV sigue el enfoque estándar de Android de actualizaciones del sistema A/B (sin interrupciones). La documentación del AOSP se aplica principalmente al SDV. En esta página, se detalla el uso específico de SDV y las rutas de acceso correctas conocidas para compilar y aplicar paquetes de actualización.

El SDV está configurado para usar actualizaciones A/B no virtuales. Para configurar y activar actualizaciones A/B para una partición /oem_ab personalizada desde un paquete de servicios, consulta Actualizaciones de particiones AB de OEM.

Implementa la HAL de control de inicio

La imagen de SDV Core para Cuttlefish (sdv_core_cf) proporciona una implementación estándar de la HAL de control de inicio basada en hardware/interfaces/boot/aidl/default/. Otros bootloaders deben implementar la HAL para admitir las actualizaciones A/B.

Consulta la sección Implementa la HAL de control de inicio de la documentación del AOSP para obtener más detalles. Puedes usar bootctl incluido en las imágenes de SDV de depuración (eng y userdebug) para probar la implementación.

Genera un paquete de OTA

Para obtener más información, consulta Cómo compilar paquetes inalámbricos. Las instrucciones de esta página siguen la documentación del AOSP con desviaciones menores.

Actualización completa

Desde la raíz del repositorio, haz lo siguiente:

source build/envsetup.sh && lunch sdv_core_cf-aosp_current-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

Estos comandos producen archivos de destino en el directorio dist_output. En el caso de las compilaciones locales de sdv_core_cf, suele ser sdv_core_cf-target_files-$USER.zip.

Para producir un paquete de OTA, debes usar ota_from_target_files. A diferencia de AOSP, el paquete no se compila como parte de m dist.

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

Actualización incremental

La misma invocación de ota_from_target_files que en AOSP:

ota_from_target_files \
  -i PREVIOUS-sdv_core_cf-target_files.zip \
  dist_new/sdv_core_cf-target_files-$USER.zip \
  incremental_ota_update.zip

Cómo instalar un paquete de OTA

Las actualizaciones se instalan con el servicio update_engine. Las compilaciones de SDV de depuración incluyen update_engine_client, que se puede usar para depurar y probar el proceso de actualización.

Para instalar un paquete de OTA, ejecuta lo siguiente:

system/update_engine/scripts/update_device.py ota_update.zip

Si la actualización se instala correctamente (el estado final es UPDATE_STATUS_UPDATED_NEED_REBOOT y el resultado es ErrorCode::kSuccess), se activará en el próximo reinicio.

Control de versiones

Para las actualizaciones del sistema, el SDV usa los metadatos del paquete de OTA de Android para determinar si un paquete de OTA cumple con los requisitos y se puede instalar.

También para APEX, SDV sigue los conceptos de Android con respecto a la capacidad de actualización. Por lo tanto, se puede actualizar un APEX cuando no es un APEX de arranque. Bootstrap APEX debe actualizarse a través de las actualizaciones del sistema y, además, debe cumplir con una de las siguientes condiciones:

  • La versión declarada es superior a la versión preinstalada, y ambas son mayores o iguales que 1.

o

  • La versión declarada es un APEX no preinstalado y la versión es superior a la versión de la lista de bloqueo, si aparece en la lista.

Por lo general, el SDV se implementa en varios sistemas de una red. Por lo tanto, debes asegurarte de que las actualizaciones realizadas en un solo sistema se ejecuten correctamente. Sin embargo, este cuidado no garantiza que todos los sistemas puedan comunicarse de forma correcta.

También es fundamental que actualices la red general, lo que requiere que las actualizaciones de los paquetes de servicios se implementen en todas las máquinas al mismo tiempo o que las actualizaciones no contengan cambios rotundos. Por ejemplo, cambios incompatibles en la interfaz.

Aunque SDV no proporciona herramientas para detectar cambios incompatibles, nuestros lineamientos describen cómo conciliar los cambios realizados en las interfaces, así como las prácticas recomendadas necesarias para implementar los cambios.

Además, SDV admite mecanismos de reversión para las actualizaciones del sistema y de APEX. Si el sistema entra de forma involuntaria en un estado insatisfactorio, podemos recuperar el último estado satisfactorio conocido.