Configura le funzionalità del kernel come moduli GKI

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

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

  2. Aggiungi i file KO ( .ko ) generati per la funzionalità alla sezione COMMON_GKI_MODULES_LIST di common/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.

  3. 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 in common/android/abi_gki_protected_exports_{ARCH} utilizzando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . I moduli designati come moduli GKI protetti devono comunque essere approvati da Google per essere moduli protetti ufficiali.

  4. Assicurati che i file KO appena aggiunti dal passaggio 2 vengano copiati nel kernel out/<androidX-YZ>/dist/system_dlkm.img e out/ androidX-YZ /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.

  5. 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

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

  2. Aggiungi i file KO ( .ko ) generati per la funzionalità alla sezione COMMON_GKI_MODULES_LIST di common/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.

  3. 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 in common/android/abi_gki_protected_exports_{ARCH} utilizzando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 . I moduli designati come moduli GKI protetti devono comunque essere approvati da Google per essere moduli protetti ufficiali.

  4. Assicurati che i file KO del modulo appena convertito dal passaggio 2 vengano copiati in out/<androidX-YZ>/dist/system_dlkm.img e out/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz 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.

  5. 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

  1. Rimuovi il modulo convertito da protetto a non protetto dall'elenco dei moduli protetti in common/android/gki_protected_modules .

  2. Aggiorna l'elenco delle esportazioni protette per escluderle dal modulo non protetto appena convertito in common/android/abi_gki_protected_exports_{ARCH} utilizzando tools/bazel run //common:kernel_aarch64_abi_update_protected_exports for aarch64 .

  3. 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.