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. 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, na sigla em inglês), precisam ser iniciados durante a inicialização do kernel.

Pedido 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 Zygote e o processo do sistema. O HAL do veículo (VHAL, na sigla em inglês) é iniciado durante a fase de inicialização como parte dos serviços principais. Pode ser movido para estados anteriores, dependendo do ServiceManager. É necessário remover dependências de bibliotecas compartilhadas (como init).
5 Zigoto Configura o Java Runtime e a memória de inicialização para objetos Android.
6 Servidor do sistema O primeiro componente Java do sistema, que inicia os serviços principais do Android. O 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. Carregar apenas os módulos em uso e inicializar 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 for usado.
    • Definir a prioridade correta para os 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 ajudar na otimização, o Google oferece as seguintes ferramentas:

  • Use packages/services/Car/tools/bootanalyze/bootanalyze.py para analisar os registros do 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 a ré, após o que o processo do kernel nativo exibe a imagem do RCV na tela. O 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 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, em seguida, a VNS.

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