È fondamentale mantenere un'interfaccia del modulo del kernel (KMI) stabile per i moduli del fornitore. Il kernel GKI viene compilato e distribuito in formato binario e i moduli caricabili dal fornitore vengono compilati in un albero distinto. Il kernel GKI e i moduli del fornitore risultanti devono funzionare come se fossero stati creati insieme.
In genere, la community di Linux ha disapprovato la nozione di stabilità dell'ABI in-kernel per il kernel principale. A fronte di toolchain e configurazioni diverse e di un kernel mainline di Linux in continua evoluzione, non è possibile mantenere un KMI stabile nel mainline. Tuttavia, è possibile mantenere un KMI stabile nell'ambiente GKI altamente vincolato con i seguenti vincoli:
Per compilare il kernel è possibile utilizzare una sola configurazione,
gki_defconfig
.Il KMI è stabile solo all'interno della stessa versione LTS e Android di un kernel, come
android13-5.10
,android12-5.10
oandroid13-5.15
.- La stabilità del KMI non viene mantenuta per
android-mainline
.
- La stabilità del KMI non viene mantenuta per
Per la compilazione del kernel e dei moduli viene utilizzata solo la toolchain Clang specifica fornita in AOSP e definita per il ramo corrispondente.
Solo i simboli noti per essere utilizzati dai moduli come specificato in un elenco di simboli vengono monitorati per la stabilità e considerati simboli KMI.
- Il corollario è che i moduli del fornitore devono utilizzare solo simboli KMI. Questo vincolo viene applicato tramite i caricamenti dei moduli non riusciti se sono richiesti simboli diversi da KMI.
Dopo il blocco del ramo KMI, le modifiche sono consentite, ma non possono interrompere il KMI. Queste modifiche includono:
- Modifiche alla configurazione
- Modifiche al codice del kernel
- Modifiche alla toolchain (inclusi gli aggiornamenti)
Utilizzare la procedura di compilazione ermetica e la toolchain LLVM
Il processo di compilazione ermetica garantisce un KMI stabile grazie ai manifest repo
in
kernel/manifest
che descrivono completamente l'ambiente di compilazione. Ad esempio, il
manifest per android13-5.15
include la toolchain, gli script di compilazione e tutto il resto necessario per compilare il
kernel GKI (Generic Kernel Image). I rispettivi file di configurazione build.config
, come la configurazione della build GKI build.config.gki.aarch64
, assicurano che gli strumenti inclusi vengano utilizzati correttamente per generare risultati di build coerenti.
L'utilizzo di un processo di compilazione ermetica garantisce inoltre che la descrizione dell'ABI per la struttura sia coerente, indipendentemente dal fatto che sia generata da Google (ad esempio abi_gki_aarch64.xml
per android13-5.15
) o in una struttura locale che include i moduli del fornitore. I
strumenti per creare e confrontare la descrizione dell'ABI
per l'interfaccia del modulo del kernel (KMI) sono forniti anche come parte del repo
descritto dal manifest.
La toolchain utilizzata per compilare il kernel GKI deve essere completamente compatibile con la toolchain utilizzata per compilare i moduli del fornitore. A partire da Android 10, tutti i kernel Android devono essere compilati con una toolchain LLVM. Con GKI, la toolchain LLVM utilizzata per compilare i kernel dei prodotti e i moduli del fornitore deve generare lo stesso ABI della toolchain LLVM di AOSP e i partner devono assicurarsi che il KMI sia compatibile con il kernel GKI. Ti consigliamo vivamente di utilizzare gli strumenti di compilazione forniti in quanto offrono la migliore compatibilità.
Passaggi successivi
Per istruzioni sulla compilazione del kernel utilizzando il processo di compilazione ermetica e la toolchain LLVM, consulta Compilare i kernel.
Per istruzioni su come monitorare l'ABI e risolvere i problemi, consulta Monitoraggio dell'ABI del kernel di Android