Cómo administrar el tiempo de inicio

El proceso de inicio es una cadena de acciones que comienza en la ROM de inicio, seguida del bootloader, el kernel, Init, Zygote y el servidor del sistema (en negrita se indica el proceso de inicio específico de Android). En el proceso de inicio específico para la industria automotriz, los servicios anticipados, como la cámara retrovisora (RVC), deben iniciarse durante el inicio del kernel.

Pedido Componente Android Android Automotive
1 ROM de arranque Carga la primera etapa del bootloader en la RAM interna.
2 Bootloader Inicia memorias, verifica su seguridad y carga el kernel.
3 Kernel Establece controladores de interrupción, protección de memoria, almacenamiento en caché y programación; inicia procesos de espacio del usuario. El proceso de la cámara retrovisora (RVC) se inicia al principio del inicio del kernel. Una vez que se inicia el proceso, el GPIO de la VMCU activa el RVC para que se muestre en la pantalla.
4 Proceso de init Analiza secuencias de comandos init.rc, activa sistemas de archivos, inicia Zygote e inicia el proceso del sistema. El HAL del vehículo (VHAL) se inicia durante la fase de inicialización como parte de los servicios principales. Se puede mover a estados anteriores en función de ServiceManager; requiere quitar las dependencias de las bibliotecas compartidas (como init).
5 Cigoto Configura Java Runtime y la memoria de inicialización para objetos de Android.
6 Servidor del sistema Es el primer componente de Java en el sistema y, además, inicia los servicios principales de Android. CarService se inicia luego de que se inician todos los servicios del sistema.

Optimiza el tiempo de inicio

Para mejorar el tiempo de inicio del sistema, sigue estos lineamientos:

  • Kernel. Carga solo los módulos en uso y, luego, inicializa solo los componentes de hardware en uso.

  • init.rc

    • Observa si hay operaciones de bloqueo (servicio en comparación con la invocación de comandos).
    • Inicia solo lo que se usa.
    • Establecer la prioridad correcta para los servicios
  • Zygote. Optimización de la carga previa de clases (especifica la lista de clases que se cargarán)

  • Administrador de paquetes

  • Servidor del sistema. Inicia solo los servicios del sistema que se usan.

Para ayudarte con la optimización, Google proporciona las siguientes herramientas:

  • Usa packages/services/Car/tools/bootanalyze/bootanalyze.py para analizar los registros de logcat y dmesg.

  • Usa packages/services/Car/tools/bootio/ para registrar la E/S de los procesos durante el inicio. Debes compilar el kernel con marcas específicas (consulta el archivo README.md).

Cómo iniciar servicios antes

En la secuencia de inicio, es posible que algunos servicios se inicien antes de que Android comience a iniciarse.

Cámara retrovisora

La cámara retrovisora (RVC) se debe controlar en el kernel. La VMCU notifica al proceso del kernel nativo cuando el vehículo cambia a la marcha atrás, después de lo cual el proceso del kernel nativo muestra la imagen de la cámara de reversa en la pantalla. El sistema HAL del vehículo puede controlar el RVC con hardware/libhardware/include/hardware/vehicle_camera.h.

HAL de vehículo (VHAL)

Es posible que algunos sistemas necesiten leer y almacenar en búfer los datos de CAN (por ejemplo, la velocidad del vehículo o el estado de los cambios) durante las primeras etapas de la secuencia de inicio mientras esperan a que se inicie el servicio del espacio del usuario (lo que ocurre más adelante en la secuencia de inicio). Esta situación requiere que la VNS y los controladores HAL y CAN se inicien muy pronto, por lo general, en unos segundos.

  • Los sistemas que pueden activar rápidamente /system pueden simplemente iniciar el administrador de servicios y, luego, la VNS con anticipación.

  • El sistema que no puede activar /system con rapidez debe mover el administrador de servicios y VNS a la imagen de arranque del kernel y vincular todas las bibliotecas dependientes de manera estática.