Questa pagina spiega come configurare una nuova funzionalità del kernel come modulo GKI o configurare una funzionalità del kernel integrata esistente come modulo GKI.
Configura 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
). Configura questa impostazione sia inarch/arm64/configs/gki_defconfig
chearch/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 ordine ordinato. Se non sei sicuro di tutti i file generati, la compilazione fallisce ed elenca tutti i file KO necessari da aggiungere all'elenco.Aggiungi lo stesso set 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 per includere quelle del modulo appena aggiunto incommon/android/abi_gki_protected_exports_{ARCH}
utilizzandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. I moduli designati come moduli GKI protetti devono comunque essere approvati da Google per essere moduli protetti ufficiali.Assicurati che i file KO appena aggiunti dal passaggio 2 vengano copiati nel kernel
out/<androidX-YZ>/dist/system_dlkm.img
eout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
. I moduli nell'archiviosystem_dlkm_staging_archive.tar.gz
possono essere utilizzati come input per generaresystem_dlkm.img
nella build della piattaforma.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare a monte le patch di conversione dei moduli. Tuttavia, devi seguire altre linee guida per inviare le patch Android Common Kernel (ACK) .
Configura una funzionalità integrata del kernel come modulo GKI
Per una funzionalità integrata del kernel esistente, modifica
gki_defconfig
e imposta l'elemento di configurazione della funzionalità del kernel richiesta day
am
(=m
). Configura questa impostazione sia inarch/arm64/configs/gki_defconfig
chearch/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 ordine ordinato. Se non sei sicuro di tutti i file generati, la compilazione fallisce ed elenca tutti i file KO necessari da aggiungere all'elenco.Aggiungi lo stesso set 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 per includere quelle del modulo appena aggiunto incommon/android/abi_gki_protected_exports_{ARCH}
utilizzandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
. I moduli designati come moduli GKI protetti devono comunque essere approvati da Google per essere moduli protetti ufficiali.Assicurati che i file KO del modulo appena convertito dal passaggio 2 vengano copiati in
out/<androidX-YZ>/dist/system_dlkm.img
eout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz
kernel. I moduli nell'archiviosystem_dlkm_staging_archive.tar.gz
possono essere utilizzati come input per generaresystem_dlkm.img
nella build della piattaforma.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare a monte le patch di conversione dei moduli. Tuttavia, devi seguire le altre linee guida per inviare le patch Android Common Kernel (ACK) .
Converti un modulo GKI protetto in non protetto
Rimuovi il modulo convertito da protetto a non protetto dall'elenco dei moduli protetti in
common/android/gki_protected_modules
.Aggiorna l'elenco delle esportazioni protette per escluderle dal modulo non protetto appena convertito in
common/android/abi_gki_protected_exports_{ARCH}
utilizzandotools/bazel run //common:kernel_aarch64_abi_update_protected_exports
foraarch64
.Invia le modifiche per la revisione. I moduli GKI sono una funzionalità del kernel solo per Android, pertanto non è necessario inviare a monte le patch di conversione dei moduli. Tuttavia, devi seguire le altre linee guida per inviare le patch Android Common Kernel (ACK) .
Guida rapida per la risoluzione delle violazioni dei simboli dei moduli GKI
Quando i moduli senza segno violano la protezione dei simboli in atto per i moduli GKI, si possono verificare due tipi di errori durante il caricamento del modulo, con conseguente errore.
1. Modulo senza segno 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 esportato dal modulo GKI some_kernel_function
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, utilizzare la versione GKI di module.ko
.
2. Modulo senza segno 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 fallisce con questo messaggio.
Risoluzione:
Questo può essere corretto utilizzando la versione GKI del modulo che esporta some_kernel_function
, se il modulo non firmato è una versione personalizzata.