Gestisci il tempo di avvio

Il processo di avvio è una catena di azioni che iniziano dalla ROM di avvio, seguita dal bootloader, dal kernel, da Init , da Zygote e dal server di sistema (il grassetto indica il processo di avvio specifico di Android). Nel processo di avvio specifico per il settore automobilistico, i primi servizi come la telecamera per la retromarcia (RVC) devono essere avviati durante l'avvio del kernel.

Ordine Componente Androide Android automobilistico
1 ROM di avvio Carica la prima fase del boot loader nella RAM interna.
2 Boot loader Avvia le memorie, verifica la sicurezza e carica il kernel.
3 Nocciolo Imposta controller di interruzione, protezione della memoria, cache e pianificazione; avvia i processi dello spazio utente. Il processo della telecamera per la retromarcia (RVC) inizia presto all'avvio del kernel. Al termine del processo, GPIO di VMCU attiva la visualizzazione di RVC sul display.
4 Processo di avvio Analizza gli script init.rc , monta file system, avvia Zygote, avvia il processo di sistema. L'HAL del veicolo (VHAL) viene avviato durante la fase di inizializzazione come parte dei servizi principali. Può essere spostato in stati precedenti a seconda di ServiceManager; richiede la rimozione delle dipendenze dalle librerie condivise (come init).
5 Zigote Configura Java Runtime e la memoria di inizializzazione per gli oggetti Android.
6 Server di sistema Primo componente Java nel sistema, avvia i servizi Android principali. CarService si avvia dopo l'avvio di tutti i servizi di sistema.

Ottimizza il tempo di avvio

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

  • Nocciolo. Caricare solo i moduli in uso e inizializzare solo i componenti hardware in uso.

  • init.rc

    • Controlla le operazioni di blocco (servizio rispetto all'invocazione del comando).
    • Inizia solo ciò che viene utilizzato.
    • Impostazione della priorità corretta per i servizi.
  • Zigote. Ottimizzazione del precaricamento delle classi (specificare l'elenco delle classi da caricare).

  • Gestore dei pacchetti

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

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

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

  • Utilizzare packages/services/Car/tools/bootio/ per registrare l'I/O per i processi durante l'avvio. È necessario compilare il kernel con flag specifici (fare riferimento al file README.md ).

Avviare i servizi in anticipo

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

Telecamera posteriore

La telecamera per la retromarcia (RVC) dovrebbe essere gestita nel kernel. La VMCU notifica al processo del kernel nativo quando il veicolo passa alla retromarcia, dopodiché il processo del kernel nativo visualizza l'immagine RVC sul display. L'HAL del veicolo può controllare l'RVC utilizzando hardware/libhardware/include/hardware/vehicle_camera.h .

HAL del veicolo (VHAL)

Alcuni sistemi potrebbero dover leggere e memorizzare nel buffer i dati CAN (ad esempio, velocità del veicolo, stato della marcia) durante le prime fasi della sequenza di avvio in attesa dell'avvio del servizio spazio utente (che avviene successivamente nella sequenza di avvio). Questo scenario richiede che VNS e i controller HAL e CAN si avviino molto presto, in genere entro pochi secondi.

  • I sistemi che possono montare rapidamente /system possono semplicemente avviare il Service Manager e poi VNS in anticipo.

  • Il sistema che non può montare rapidamente /system deve spostare sia il gestore del servizio che il VNS nell'immagine di avvio del kernel e collegare staticamente tutte le librerie dipendenti.