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 , Zygote e servidor do sistema (negrito indica o processo de inicialização específico do Android). No processo de inicialização específico para automóveis, os primeiros serviços, como câmera retrovisora ​​(RVC), devem ser iniciados durante a inicialização do kernel.

Ordem Componente Android Android automotivo
1 ROM de inicialização Carrega o primeiro estágio do carregador de boot na RAM interna.
2 Carregador de inicialização Inicia 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 retrovisora ​​(RVC) começa no início da inicialização do kernel. Após o término do processo, o GPIO do VMCU aciona o RVC para ser exibido no display.
4 Processo de inicialização Analisa scripts init.rc , monta sistemas de arquivos, inicia o Zygote, inicia o processo do sistema. O HAL do veículo (VHAL) começa durante a fase inicial 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 de inicialização para objetos Android.
6 Servidor do sistema Primeiro componente Java no sistema, inicia os principais serviços do Android. CarService inicia após todos os serviços do sistema serem iniciados.

Otimize o tempo de inicialização

Para melhorar o tempo de inicialização do 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

    • Fique atento às operações de bloqueio (serviço comparado à invocação de comando).
    • Comece apenas o que é usado.
    • Definir 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 flags específicos (consulte o arquivo README.md ).

Iniciar os serviços mais cedo

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

Câmera de visão traseira

A câmera retrovisora ​​(RVC) deve ser tratada no kernel. O VMCU notifica o processo do kernel nativo quando o veículo muda para reverso, após o qual o processo do kernel nativo exibe a imagem RVC no monitor. O HAL do veículo 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 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 posteriormente na sequência de inicialização). Este cenário exige que o VNS e os controladores HAL e CAN sejam iniciados muito cedo, normalmente em alguns segundos.

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

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