Gestión del tiempo de arranque

El proceso de arranque es una cadena de acciones que comienza en la ROM de arranque, seguida por el cargador de arranque, el kernel, el inicio , el cigoto y el servidor del sistema (la negrita indica un proceso de arranque específico de Android). En el proceso de arranque específico del automóvil, los primeros servicios, como la cámara retrovisora, deben iniciarse durante el arranque del Kernel.

Pedido Componente Androide Android automotriz
1 ROM de arranque Carga la primera etapa del gestor de arranque en la memoria RAM interna.
2 cargador de arranque Inicie sus memorias, verifique la seguridad y cargue el kernel.
3 Núcleo Configura controladores de interrupción, protección de memoria, cachés y programación, inicia procesos de espacio de usuario El proceso de la cámara de visión trasera (RVC) comienza temprano en el arranque del kernel. Una vez que finaliza el proceso, GPIO de VMCU activa RVC para que se muestre en la pantalla.
4 Proceso de inicio Analiza scripts init.rc , monta sistemas de archivos, inicia zygote, inicia procesos del sistema. El vehículo HAL (VHAL) se inicia durante la fase de inicio como parte de los servicios básicos. Se puede mover a estados anteriores según ServiceManager; requiere la eliminación de dependencias en bibliotecas compartidas (como init).
5 Cigoto Configura el tiempo de ejecución de Java y la memoria de inicio para los objetos de Android.
6 Servidor del sistema Primer componente de Java en el sistema, inicia los servicios básicos de Android. CarService se inicia después de que se inician todos los servicios del sistema.

Optimización del tiempo de arranque

Para mejorar el tiempo de arranque en su sistema, use las siguientes pautas:

  • Núcleo Cargue solo los módulos en uso e inicialice solo los componentes de hardware en uso.

  • init.rc

    • Esté atento a las operaciones de bloqueo (servicio en comparación con la invocación de comandos).
    • Comience solo lo que se usa.
    • Establecer la prioridad correcta para los servicios.
  • Cigoto . Optimización de precarga de clases (especificar la lista de clases a cargar).

  • Gerente de empaquetación

  • Servidor del sistema . Inicie solo los servicios del sistema que se utilizan.

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

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

  • Use packages/services/Car/tools/bootio/ para registrar E/S para procesos durante el arranque. Debe compilar el kernel con indicadores específicos (consulte el archivo README.md ).

Servicios de inicio temprano

En la secuencia de inicio, algunos servicios pueden iniciarse antes de que Android comience a iniciarse.

Cámara trasera

La cámara de visión trasera (RVC) debe manejarse en el kernel. La VMCU notifica al proceso de kernel nativo cuando el vehículo cambia a Marcha atrás, después de lo cual el proceso de kernel nativo muestra la imagen RVC en la pantalla. El HAL del vehículo puede controlar el RVC usando hardware/libhardware/include/hardware/vehicle_camera.h .

Vehículo HAL (VHAL)

Es posible que algunos sistemas necesiten leer y almacenar en búfer los datos CAN (por ejemplo, la velocidad del vehículo, el estado de la marcha) durante las primeras etapas de la secuencia de arranque mientras esperan que se inicie el servicio de espacio de usuario (que ocurre más adelante en la secuencia de arranque). Este escenario requiere que VNS y los controladores HAL y CAN se inicien muy temprano, generalmente en unos pocos segundos.

  • Los sistemas que pueden montar /system rápidamente pueden simplemente iniciar el administrador de servicios y luego VNS antes.

  • El sistema que no puede montar /system rápidamente debe mover tanto el administrador de servicios como el VNS a la imagen de arranque del kernel y vincular todas las bibliotecas dependientes de forma estática.