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
-
Otimize a imagem do produto para incluir apenas os APKs em uso.
-
-
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 arquivoREADME.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.