Configura le funzionalità del kernel come moduli GKI

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

  1. Per la nuova funzionalità, modifica gki_defconfig e imposta l'elemento di configurazione della funzionalità del kernel richiesta da n a m (=m). Imposta questa impostazione sia in arch/arm64/configs/gki_defconfig sia in arch/x86/configs/gki_defconfig.

  2. Aggiungi i file KO (.ko) generati per la funzionalità alla sezione _COMMON_GKI_MODULES_LIST del seguente file. Aggiungi i file in ordine. Se non sei sicuro di tutti i file generati, la build non va a buon fine ed elenca tutti i file KO necessari da aggiungere all'elenco.

    • In android17-6.18 e versioni successive, aggiungi elementi a common/bazel/modules_private.bzl.
    • In android16-6.12 e versioni precedenti, aggiungi elementi a common/modules.bzl.
  3. Per Android 14, aggiungi lo stesso insieme di file KO del passaggio 2, ordinati in ordine crescente per la ricerca binaria in fase di runtime, a common/android/gki_{ARCH}_protected_modules per designare il modulo come modulo GKI protetto.

  4. Per Android 14 e 15, aggiorna l'elenco delle esportazioni in modo che includa le esportazioni appena aggiunte in common/android/abi_gki_protected_exports_ARCHITECTURE. Ad esempio, per aggiornare l'elenco, esegui tools/bazel run //common:kernel_aarch64_abi_update_protected_exports per aarch64.

  5. Assicurati che i file KO appena aggiunti nel passaggio 2 vengano copiati in out/<androidX-Y.Z>/dist/system_dlkm.img e out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz del kernel. I moduli nell'archivio system_dlkm_staging_archive.tar.gz possono essere utilizzati come input per generare system_dlkm.img nella build della piattaforma.

  6. 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 le patch di Android Common Kernel (ACK).

Configurare una funzionalità integrata del kernel come modulo GKI

  1. Per una funzionalità del kernel integrata esistente, modifica gki_defconfig e imposta l'elemento di configurazione della funzionalità del kernel richiesta da y a m (=m). Imposta questa impostazione sia in arch/arm64/configs/gki_defconfig sia in arch/x86/configs/gki_defconfig.

  2. Aggiungi i file KO (.ko) generati per la funzionalità alla sezione _COMMON_GKI_MODULES_LIST del seguente file. Aggiungi i file in ordine. Se non sei sicuro di tutti i file generati, la build non va a buon fine ed elenca tutti i file KO necessari da aggiungere all'elenco.

    • In android17-6.18 e versioni successive, aggiungi elementi a common/bazel/modules_private.bzl.
    • In android16-6.12 e versioni precedenti, aggiungi elementi a `common/modules.bzl.
  3. Per Android 14, aggiungi lo stesso insieme di file KO del passaggio 2, ordinati in ordine crescente per la ricerca binaria in fase di runtime, a common/android/gki_{ARCH}_protected_modules per designare il modulo come modulo GKI protetto.

  4. Per Android 14 e 15, aggiorna l'elenco delle esportazioni protette in modo da includere quelle del modulo appena aggiunto in common/android/abi_gki_protected_exports_{ARCH} utilizzando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports per aarch64.

  5. Assicurati che i file KO del modulo appena convertito nel passaggio 2 vengano copiati in del kernel out/<androidX-Y.Z>/dist/system_dlkm.img e out/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. I moduli nell'archivio system_dlkm_staging_archive.tar.gz possono essere utilizzati come input per generare system_dlkm.img nella build della piattaforma.

  6. 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 le patch di Android Common Kernel (ACK).

Convertire un modulo GKI protetto in non protetto

  1. Per Android 15 e versioni successive, aggiungi il modulo convertito da protetto a non protetto all'elenco _COMMON_UNPROTECTED_MODULES_LIST nel seguente file:

    • In android17-6.18 e versioni successive, aggiungi elementi a common/bazel/modules_private.bzl.
    • In android16-6.12 e versioni precedenti, aggiungi elementi a common/modules.bzl.
  2. Per Android 14, rimuovi il modulo convertito da protetto a non protetto dall'elenco dei moduli protetti in common/android/gki_protected_modules.

  3. Per Android 14 e 15, 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} utilizzando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports per aarch64.

  4. 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 le patch di Android Common Kernel (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, con conseguente errore.

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 fornitore non firmato e tenta di risolvere il simbolo esportato del 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 risolve 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 questo modulo. Quando module.ko tenta di esportare some_kernel_function, che può essere esportata solo da un modulo GKI firmato, il caricamento non va a buon fine e viene visualizzato questo messaggio.

Risoluzione:

Questo problema può essere corretto utilizzando la versione GKI del modulo che esporta some_kernel_function, se il modulo non firmato è una versione personalizzata.