Gerenciar o tempo de inicialização

O processo de inicialização é uma cadeia de ações que começa na ROM de inicialização, seguida pelo carregador de inicialização, kernel, Init, Zigoto e servidor do sistema. O negrito indica o processo de inicialização específico do Android. No processo de inicialização específico para automóveis, os serviços iniciais, como a câmera traseira (RVC), precisam ser iniciados durante a inicialização do kernel.

Order Componente Android Android Automotive
1 ROM de inicialização Carrega o primeiro estágio do carregador de inicialização na RAM interna.
2 Carregador de inicialização Inicia memórias, verifica a segurança e carrega o kernel.
3 Kernel Configura controladores de interrupção, proteção de memória, caches e programação; inicia processos do espaço do usuário. O processo da câmera de ré (RVC, na sigla em inglês) começa no início da inicialização do kernel. Depois que o processo é iniciado, o GPIO do VMCU aciona o RVC para mostrar na tela.
4 Processo de inicialização Analisa scripts init.rc, monta sistemas de arquivos, inicia o Zigoto, inicia o processo do sistema. A HAL do veículo (VHAL, na sigla em inglês) começa durante a fase de inicialização como parte dos serviços principais. Pode ser movido para estados anteriores, dependendo do ServiceManager, requer a remoção de dependências em bibliotecas compartilhadas (como init).
5 Zigoto Configura o Java Runtime e a memória init para objetos do Android.
6 Servidor do sistema O primeiro componente Java do sistema, que inicia os serviços principais do Android. CarService é iniciado depois que todos os serviços do sistema são iniciados.

Otimizar o tempo de inicialização

Para melhorar o tempo de inicialização no sistema, siga estas diretrizes:

  • Kernel. Carregue apenas os módulos em uso e inicialize apenas os componentes de hardware em uso.

  • init.rc

    • Verifique se há operações de bloqueio (serviço em comparação com a invocação de comando).
    • Inicie apenas o que é usado.
    • Definir a prioridade correta dos serviços.
  • Zigoto. Otimização de pré-carregamento de classe (especifica a lista de classes a carregar).

  • Gerenciador de pacotes

  • Servidor do sistema. Inicie apenas os serviços do sistema que são usados.

Para receber ajuda com a otimização, o Google fornece as seguintes ferramentas:

  • Use packages/services/Car/tools/bootanalyze/bootanalyze.py para analisar os registros de logcat e dmesg.

  • Use packages/services/Car/tools/bootio/ para registrar a E/S de processos durante a inicialização. É necessário compilar o kernel com flags específicas (consulte o arquivo README.md).

Iniciar os serviços com antecedência

Na sequência de inicialização, alguns serviços podem ser iniciados antes do Android.

Câmera traseira

A câmera retrovisor (RVC, na sigla em inglês) precisa ser processada no kernel. A VMCU notifica o processo do kernel nativo quando o veículo muda para o modo reverso. Depois disso, o processo do kernel nativo exibe a imagem RVC na tela. A HAL do veículo pode controlar o RVC usando hardware/libhardware/include/hardware/vehicle_camera.h.

HAL veicular (VHAL)

Alguns sistemas podem precisar ler e armazenar dados CAN (por exemplo, velocidade do veículo, status da engrenagem) durante os estágios iniciais da sequência de inicialização enquanto aguardam o início do serviço do espaço do usuário, que ocorre mais tarde na sequência de inicialização. Esse cenário requer que os controladores de VNS e HAL e CAN sejam iniciados muito cedo, geralmente em alguns segundos.

  • Os sistemas que podem montar rapidamente o /system podem simplesmente iniciar o gerenciador de serviços e, depois, o VNS antecipadamente.

  • O sistema que não consegue montar /system rapidamente precisa mover o gerenciador de serviços e o VNS para a imagem de inicialização do kernel e vincular todas as bibliotecas dependentes de forma estática.