Administrar el tiempo de arranque

El proceso de arranque es una cadena de acciones que comienza desde la ROM de arranque, seguida por el gestor de arranque, el kernel, Init , Zygote y el servidor del sistema (la negrita indica el 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 ​​(RVC), deben iniciarse durante el arranque del kernel.

Orden Componente Androide Android Automotriz
1 ROM de arranque Carga la primera etapa del cargador de arranque en la RAM interna.
2 Cargador de arranque Ingresa a sus memorias, verifica la seguridad y carga el kernel.
3 Núcleo Configura controladores de interrupciones, protección de memoria, cachés y programación; lanza procesos en el espacio de usuario. El proceso de la cámara retrovisora ​​(RVC) comienza temprano en el arranque del kernel. Una vez finalizado el proceso, GPIO de VMCU activa RVC para que se muestre en 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 inicial como parte de los servicios principales. Se puede mover a estados anteriores según ServiceManager; requiere eliminar las dependencias de bibliotecas compartidas (como init).
5 Cigoto Configura Java Runtime y la memoria de inicio para objetos de Android.
6 Servidor del sistema El primer componente Java del sistema inicia los servicios principales de Android. CarService se inicia después de que se inician todos los servicios del sistema.

Optimizar el tiempo de arranque

Para mejorar el tiempo de arranque en su sistema, utilice 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 comparado con la invocación de comandos).
    • Empiece sólo con lo que se utiliza.
    • Establecer la prioridad correcta para los servicios.
  • Cigoto. Optimización de la precarga de clases (especifique la lista de clases a cargar).

  • Gerente de empaquetación

  • Servidor del sistema. Inicie sólo 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.

  • Utilice 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 ).

Iniciar los servicios 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 del kernel nativo cuando el vehículo cambia a Marcha atrás, después de lo cual el proceso del kernel nativo muestra la imagen RVC en la pantalla. El vehículo HAL 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 datos CAN (por ejemplo, velocidad del vehículo, estado de la marcha) durante las primeras etapas de la secuencia de inicio mientras esperan que se inicie el servicio de espacio de usuario (lo que ocurre más adelante en la secuencia de inicio). 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 temprano.

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