Questa pagina spiega come configurare una nuova funzionalità del kernel come modulo GKI o come configurare una funzionalità del kernel integrata esistente come modulo GKI.
Configurare una nuova funzionalità come modulo GKI
Per la nuova funzionalità, modifica
gki_defconfig
e imposta l'elemento di configurazione della funzionalità del kernel richiesta dan
am
(=m
). Imposta questa impostazione sia inarch/arm64/configs/gki_defconfig
che inarch/x86/configs/gki_defconfig
.Aggiungi i file KO (
.ko
) generati per la funzionalità alla sezioneCOMMON_GKI_MODULES_LIST
dicommon/modules.bzl
. Aggiungi i file in un ordine ordinato. Se hai dubbi su tutti i file generati, la compilazione non va a buon fine e vengono elencati tutti i file KO necessari da aggiungere all'elenco.(Facoltativo) Per Android 15 e versioni successive, ometti questo passaggio.
Aggiungi lo stesso insieme di file KO del passaggio 2, ordinati in ordine crescente per la ricerca binaria in fase di esecuzione, a
common/android/gki_{ARCH}_protected_modules
per designare il modulo come modulo GKI protetto.Aggiorna l'elenco delle esportazioni in modo che includa quelle appena aggiunte in
common/android/abi_gki_protected_exports_ARCHITECTURE
. Ad esempio, per aggiornare l'elenco, eseguitools/bazel run //common:kernel_aarch64_abi_update_protected_exports
peraarch64
. I moduli identificati come moduli GKI protetti devono comunque essere approvati da Google per essere considerati moduli protetti ufficiali.Assicurati che i file KO appena aggiunti nel passaggio 2 vengano copiati in
out/<androidX-Y.Z>/dist/system_dlkm.img
eout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
del kernel. I moduli nell'archiviosystem_dlkm_staging_archive.tar.gz
possono essere utilizzati come input per generare il filesystem_dlkm.img
nella compilazione della piattaforma.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare patch di conversione dei moduli upstream. Tuttavia, devi seguire altre linee guida per inviare patch per il kernel Android Common (ACK).
Configurare una funzionalità integrata del kernel come modulo GKI
Per una funzionalità del kernel integrata esistente, modifica
gki_defconfig
e imposta l'elemento di configurazione della funzionalità del kernel richiesta day
am
(=m
). Imposta questa impostazione sia inarch/arm64/configs/gki_defconfig
sia inarch/x86/configs/gki_defconfig
.Aggiungi i file KO (
.ko
) generati per la funzionalità alla sezioneCOMMON_GKI_MODULES_LIST
dicommon/modules.bzl
. Aggiungi i file in un ordine ordinato. Se hai dubbi su tutti i file generati, la compilazione non va a buon fine e vengono elencati tutti i file KO necessari da aggiungere all'elenco.Aggiungi lo stesso insieme di file KO del passaggio 2, ordinati in ordine crescente per la ricerca binaria in fase di esecuzione, a
common/android/gki_{ARCH}_protected_modules
per designare il modulo come modulo GKI protetto. Aggiorna l'elenco delle esportazioni protette in modo da includere quelle del modulo appena aggiunto incommon/android/abi_gki_protected_exports_{ARCH}
utilizzandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
peraarch64
. I moduli identificati come moduli GKI protetti devono comunque essere approvati da Google per essere considerati moduli protetti ufficiali.Assicurati che i file KO del modulo appena convertiti del passaggio 2 vengano copiati in
out/<androidX-Y.Z>/dist/system_dlkm.img
eout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
del kernel. I moduli nell'archiviosystem_dlkm_staging_archive.tar.gz
possono essere utilizzati come input per generare il filesystem_dlkm.img
nella compilazione della piattaforma.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare patch di conversione dei moduli upstream. Tuttavia, devi seguire le altre linee guida per inviare patch per il kernel Android Common (ACK).
Convertire un modulo GKI protetto in non protetto
- Per Android 14 e versioni precedenti: rimuovi il modulo in fase di conversione da protetto a non protetto dall'elenco dei moduli protetti all'indirizzo
common/android/gki_protected_modules
.
- Per Android 15 e versioni successive: aggiungi il modulo
in fase di conversione da protetto a non protetto all'elenco
COMMON_UNPROTECTED_MODULES_LIST
nel filecommon/modules.bzl
.
- Per Android 14 e versioni precedenti: rimuovi il modulo in fase di conversione da protetto a non protetto dall'elenco dei moduli protetti all'indirizzo
Aggiorna l'elenco delle esportazioni protette in modo da escludere quelle del modulo non protetto appena convertito in
common/android/abi_gki_protected_exports_{ARCH}
utilizzandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
peraarch64
.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare patch di conversione dei moduli upstream. Tuttavia, devi seguire le altre linee guida per inviare patch per il kernel Android Common (ACK).
Guida rapida alla risoluzione delle violazioni dei simboli dei moduli GKI
Quando i moduli non firmati violano la protezione dei simboli in vigore per i moduli GKI, durante il caricamento dei moduli possono verificarsi due tipi di errori che causano un fallimento.
1. Modulo non firmato che utilizza il simbolo protetto
Errore:
module: Protected symbol: some_kernel_function (err -13)
Causa:
Il file module.ko
è un modulo del fornitore non firmato e tenta di risolvere il simbolo some_kernel_function
esportato dal modulo GKI durante il caricamento, senza essere elencato nell'elenco dei simboli del fornitore.
Risoluzione:
Se module.ko
non è un modulo GKI protetto, l'aggiornamento dell'elenco dei simboli risolverà l'errore includendo some_kernel_function
nell'elenco dei simboli del fornitore.
In alternativa, utilizza la versione GKI di module.ko
.
2. Modulo non firmato che esporta il simbolo protetto
Errore:
module: exports protected symbol some_kernel_function
Causa:
Il modulo che esporta some_kernel_function
è un modulo GKI protetto e module.ko
è probabilmente una versione personalizzata non firmata di quel modulo. Quando
module.ko
tenta di esportare some_kernel_function
, che può essere esportato solo
da un modulo GKI firmato, il caricamento non va a buon fine con questo messaggio.
Risoluzione:
Questo problema può essere corretto utilizzando la versione GKI del modulo che esportasome_kernel_function
, se il modulo non firmato è una versione personalizzata.