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