Gerenciando 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 Bootloader, Kernel, Init , Zygote e System Server (negrito indica processo de inicialização específico do Android). No processo de inicialização específico para automóveis, os primeiros serviços, como a câmera de ré, devem ser iniciados durante a inicialização do Kernel.

Pedido Componente Android Android automotivo
1 ROM de inicialização Carrega o primeiro estágio do carregador de inicialização na RAM interna.
2 Bootloader Inicia as memórias, verifica a segurança e carrega o kernel.
3 Núcleo Configura controladores de interrupção, proteção de memória, caches e agendamento, inicia processos de espaço do usuário O processo da câmera de visão traseira (RVC) começa cedo na inicialização do kernel. Após o processo estar ativo, o GPIO do VMCU aciona o RVC para mostrar no display.
4 Processo de inicialização Analisa scripts init.rc , monta sistemas de arquivos, inicia o zigoto, inicia o processo do sistema. O veículo HAL (VHAL) é iniciado 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 tempo de execução Java e a memória de inicialização para objetos Android.
6 Servidor do sistema Primeiro componente Java no sistema, inicia os principais serviços Android. O CarService inicia após todos os serviços do sistema serem iniciados.

Otimizando o tempo de inicialização

Para melhorar o tempo de inicialização em seu sistema, use as seguintes diretrizes:

  • Núcleo . Carregue apenas os módulos em uso e inicialize apenas os componentes de hardware em uso.

  • init.rc

    • Observe as operações de bloqueio (serviço comparado à invocação de comando).
    • Comece apenas o que é usado.
    • Definindo a prioridade correta para os serviços.
  • Zigoto . Otimização de pré-carregamento de classe (especifique a lista de classes a serem carregadas).

  • Gerenciador de pacotes

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

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

  • Use packages/services/Car/tools/bootanalyze/bootanalyze.py para analisar logs logcat e dmesg.

  • Use packages/services/Car/tools/bootio/ para registrar E/S para processos durante a inicialização. Você deve compilar o kernel com sinalizadores específicos (consulte o arquivo README.md ).

Iniciando os serviços cedo

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

Câmera de visão traseira

A câmera de visão traseira (RVC) deve ser tratada no kernel. O VMCU notifica o processo de kernel nativo quando o veículo muda para Reverse, após o que o processo de kernel nativo exibe a imagem RVC na tela. O veículo HAL pode controlar o RVC usando hardware/libhardware/include/hardware/vehicle_camera.h .

Veículo HAL (VHAL)

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

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

  • O sistema que não pode montar /system rapidamente deve mover o gerenciador de serviços e o VNS para a imagem de inicialização do kernel e vincular todas as bibliotecas dependentes estaticamente.