Domande frequenti sul kernel di Android

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

È possibile modificare gli elenchi di simboli dell'interfaccia del modulo del kernel (KMI) in un kernel stabile?

Le modifiche che non influiscono sul KMI esistente possono essere aggiunte ai kernel bloccati. Queste modifiche includono nuove funzioni esportate e voci dell'elenco di simboli. Per maggiori dettagli, consulta Gestire gli 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 un KMI bloccato. Prima del blocco KMI, queste strutture possono essere modificate.

Posso modificare il kernel purché non interrompa la compatibilità binaria o di origine?

Le modifiche che non influiscono sul KMI possono essere apportate come descritto in Patch specifiche per Android.

In che modo GKI gestisce la configurazione del kernel?

Per informazioni sulla configurazione del kernel, consulta le Modifiche a gki_defconfig.

Come faccio a gestire le correzioni di bug upstream per le sovrascritture dei moduli GKI esistenti?

Se crei un modulo del fornitore basato su un driver in Android Common Kernel (ACK), è tua responsabilità assicurarti che le correzioni di bug da upstream e 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 per GKI?

Esistono test Vendor Test Suite (VTS) che verificano che sia installata una build GKI certificata e che applichino i requisiti GKI per release. 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 faccio a creare il file di frammento di defconfig del progetto per le build dei dispositivi?

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. Alcuni esempi che fanno parte della codebase ACK sono Cuttlefish e DB845c. Non è possibile evitare un esame manuale delle opzioni di configurazione per ottimizzare il frammento, ma scripts/diffconfig dalle origini del kernel è utile per confrontare i risultati di gki_defconfig e gki_defconfig+device.fragment.

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

La pagina man di modprobe contiene questa descrizione: "modprobe aggiunge o rimuove in modo intelligente un modulo dal kernel Linux: tieni presente che, per comodità, non esiste alcuna differenza tra _ e - nei nomi dei moduli (viene eseguita la conversione automatica del trattino basso )." Il team GKI rispetta la convenzione upstream standard, pertanto gli strumenti del fornitore o le convenzioni di denominazione dei moduli devono tenere conto di questa conformità.

Come faccio ad attivare debugfs per uso interno?

Per maggiori dettagli sull'attivazione di debugfs, consulta Funzionalità di debug downstream intrusive features.

Come faccio a risolvere le ABI non corrispondenti tra il kernel GKI con una configurazione di moduli specifica abilitata?

Le ABI non corrispondenti tra il kernel GKI e la configurazione del modulo rappresentano una dipendenza implicita dalla configurazione del modulo, in cui l'abilitazione di un modulo comporta 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 in Issue Tracker e carica una modifica nell'elenco dei simboli.