Domande frequenti sul kernel Android

Questo documento contiene le domande frequenti sul kernel Android, noto anche come kernel Generic Kernel Image (GKI). Se non hai familiarità con GKI e la terminologia del kernel GKI, fai riferimento alla panoramica del kernel .

Gli elenchi di simboli KMI (Kernel Module Interface) possono essere modificati in un kernel stabile?

Le modifiche che non influiscono sul KMI esistente possono essere aggiunte ai kernel congelati. Queste modifiche includono nuove funzioni esportate e voci dell'elenco dei simboli. Per i dettagli, vedere Gestione degli elenchi di simboli .

Posso modificare le strutture utilizzate dai moduli del fornitore in un kernel stabile?

Le strutture che fanno parte di un'interfaccia KMI non possono essere modificate nei kernel con una KMI congelata. Prima del congelamento del KMI, queste strutture possono essere modificate.

Posso cambiare il kernel purché non interrompa la compatibilità binario/sorgente?

Le modifiche che non influiscono sul KMI possono essere apportate come descritto nelle patch specifiche di Android .

In che modo GKI gestisce la configurazione del kernel?

Per informazioni sulla configurazione del kernel, fare riferimento a Modifiche a gki_defconfig .

Come posso gestire le correzioni di bug upstream per le sovrascritture sui moduli GKI esistenti?

Se crei un modulo del fornitore basato su un driver in Android Common Kernel (ACK) , spetta a te garantire che le correzioni dei bug provenienti dall'upstream e dall'ACK vengano propagate al tuo modulo. In genere, è nel tuo interesse utilizzare il kernel GKI e i moduli GKI senza modifiche, in modo che questi aggiornamenti vengano forniti in modo coerente da Google.

Esistono test specifici GKI?

Esistono test Vendor Test Suite (VTS) che verificano che sia installata una build GKI certificata e anche per applicare i requisiti GKI per ogni rilascio. Ad esempio, esistono test VTS di Android 12 per l'intestazione di avvio v3 e per verificare l'esistenza delle partizioni richieste in un dispositivo che esegue un kernel 5.10.

Come posso creare il file di frammento defconfig del progetto per le build del dispositivo?

Molti dispositivi conformi a GKI utilizzano un frammento di configurazione per descrivere le opzioni di configurazione necessarie, oltre a gki_defconfig , per creare i moduli del fornitore. Gli esempi che fanno parte del codice base ACK includono Cuttlefish e DB845c. Non c'è modo di evitare un esame manuale delle opzioni di configurazione per ottimizzare il frammento, ma scripts/diffconfig dai sorgenti del kernel è utile per confrontare i risultati di gki_defconfig e gki_defconfig+device.fragment .

Esiste una soluzione alternativa per trattare modprobe - e _ come equivalenti?

La pagina man di modprobe contiene questa descrizione: " modprobe aggiunge o rimuove in modo intelligente un modulo dal kernel Linux: nota che per comodità, non c'è differenza tra _ e - nei nomi dei moduli (viene eseguita la conversione automatica del carattere di sottolineatura)." Il team GKI aderisce alla convenzione standard upstream, quindi gli strumenti del fornitore o le convenzioni di denominazione dei moduli devono tenere conto di questa aderenza.

Come abilito i debugf per uso interno?

Per dettagli sull'abilitazione di debugfs, vedere funzionalità di debug downstream intrusive .

Come posso risolvere gli ABI non corrispondenti tra il kernel GKI con una configurazione del modulo specifica abilitata?

Gli ABI non corrispondenti tra il kernel GKI e la configurazione del modulo rappresentano una dipendenza implicita della configurazione del modulo, in cui l'abilitazione di un modulo provoca la creazione di una configurazione binaria nell'immagine del kernel risultante. Contatta il team del kernel Android ( kernel-team@android.com ) per determinare un percorso da seguire. Dopo aver determinato l'elenco dei simboli, crea un bug nell'Issue Tracker e carica una modifica all'elenco dei simboli.

Ho dispositivi compatibili con GKI 1.0 sul campo che eseguono il kernel 5.4 avviato con Android 11 e 12. Quali opzioni di aggiornamento del kernel sono disponibili e come posso testare questi dispositivi durante l'aggiornamento ad Android 12 e 13?

Fare riferimento alla matrice di compatibilità per un elenco delle versioni del kernel supportate per le versioni di avvio e aggiornamento. Ecco due esempi di aggiornamento.

Esempio 1: un utente con un dispositivo che si avvia con Android 11 con il kernel android11-5.4 ( GKI 1.0 ) può scegliere una di queste opzioni durante l'aggiornamento ad Android 12:

  • Esegui l'aggiornamento al kernel android12-5.10 GKI 2.0 (fortemente consigliato).

  • Mantieni il kernel android11-5.4 .

  • Aggiorna al kernel android12-5.4 .

Esempio 2: un utente con un dispositivo che si avvia con Android 12 con il kernel android12-5.4 o android12-5.10 può scegliere una di queste opzioni durante l'aggiornamento ad Android 13:

  • Esegui l'upgrade al kernel android13-5.10 o android13-5.15 GKI 2.0 (fortemente consigliato).

  • Mantieni il kernel android12-5.4 GKI 1.0 .

  • Mantieni il kernel android12-5.10 GKI 2.0 .

Nello specifico per i test di conformità Treble, ti consigliamo di eseguire una delle seguenti operazioni:

  • Sostituisci il kernel partner con il kernel GKI 1.0 certificato ( android11-5.4 o android12-5.4 ).

  • Spedisci con il kernel GKI 2.0 certificato ( android12-5.10 , android13-5.10 o android13-5.15 ) a seconda della selezione.

Puoi scaricare le build GKI 2.0 dalle build di rilascio Generic Kernel Image (GKI) .