Gestisci tempo di avvio

La procedura di avvio è una catena di azioni che inizia dalla ROM di avvio, seguita dal bootloader, dal kernel, da Init, da Zygote e da system server (in grassetto è indicato il processo di avvio specifico di Android). Nella procedura di avvio specifica per i veicoli, i servizi iniziali come la videocamera di retrovisione devono essere avviati durante l'avvio del kernel.

Ordina Componente Android Android Automotive
1 ROM di avvio Carica la prima fase del bootloader nella RAM interna.
2 Bootloader Inizializza le memorie, verifica la sicurezza e carica il kernel.
3 Kernel Configura i controller di interruzione, la protezione della memoria, le cache e la pianificazione; avvia i processi dello spazio utente. Il processo della videocamera di retrovisione (RVC) si avvia presto nell'avvio del kernel. Al termine della procedura, il GPIO del VMCU attiva la visualizzazione del RVC sul display.
4 Procedura di inizializzazione Analizza gli script init.rc, monta i file system, avvia Zygote e avvia il processo di sistema. HAL del veicolo (VHAL) si avvia durante la fase di inizializzazione come parte dei servizi di base. Può essere spostato in stati precedenti a seconda di ServiceManager; richiede la rimozione delle dipendenze nelle librerie condivise (ad esempio init).
5 Zigote Configura il runtime Java e la memoria di inizializzazione per gli oggetti Android.
6 Server di sistema Il primo componente Java nel sistema avvia i servizi Android principali. CarService viene avviato dopo l'avvio di tutti i servizi di sistema.

Ottimizzare il tempo di avvio

Per migliorare il tempo di avvio del sistema, segui le seguenti linee guida:

  • Kernel. Carica solo i moduli in uso e inizializza solo i componenti hardware in uso.

  • init.rc

    • Fai attenzione alle operazioni di blocco (servizio rispetto all'invocazione del comando).
    • Avvia solo ciò che viene utilizzato.
    • Impostazione della priorità corretta per i servizi.
  • Zigote. Ottimizzazione del precaricamento dei corsi (specifica l'elenco dei corsi da caricare).

  • Package Manager

  • Server di sistema. Avvia solo i servizi di sistema utilizzati.

Per assistenza con l'ottimizzazione, Google fornisce i seguenti strumenti:

  • Utilizza packages/services/Car/tools/bootanalyze/bootanalyze.py per analizzare i log di logcat e dmesg.

  • Utilizza packages/services/Car/tools/bootio/ per registrare l'I/O per i processi durante il boot. Devi compilare il kernel con flag specifici (fai riferimento al file README.md).

Avvia i servizi in anticipo

Nella sequenza di avvio, alcuni servizi potrebbero essere avviati prima dell'avvio di Android.

Fotocamera posteriore

La videocamera di retrovisione (RVC) deve essere gestita nel kernel. La VMCU notifica il processo del kernel nativo quando il veicolo inserisce la retromarcia, dopodiché il processo del kernel nativo mostra l'immagine RVC sul display. L'HAL del veicolo può controllare l'RVC utilizzando: hardware/libhardware/include/hardware/vehicle_camera.h.

Vehicle HAL (VHAL)

Alcuni sistemi potrebbero dover leggere e mettere in buffer i dati CAN (ad esempio la velocità del veicolo, lo stato della marcia) durante le prime fasi della sequenza di avvio in attesa dell'avvio del servizio nello spazio utente (che si verifica più avanti nella sequenza di avvio). Questo scenario richiede che il VNS e i controller HAL e CAN inizino molto presto, in genere entro pochi secondi.

  • I sistemi che possono montare rapidamente /system possono semplicemente avviare il gestore del servizio e poi VNS in anticipo.

  • Il sistema che non riesce a montare rapidamente /system deve spostare sia il gestore dei servizi sia il VNS nell'immagine di avvio del kernel e collegare tutte le librerie dipendenti in modo statico.