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