È fondamentale mantenere un'interfaccia del modulo kernel (KMI) stabile per i moduli del fornitore. Il kernel GKI viene creato e spedito in formato binario e i moduli caricabili dal fornitore vengono creati in un albero separato. Il kernel GKI e i moduli del fornitore risultanti devono funzionare come se fossero stati creati insieme.
In genere, la community Linux ha disapprovato l'idea di stabilità dell'ABI in-kernel per il kernel mainline. Di fronte a toolchain, configurazioni e un kernel mainline Linux in continua evoluzione, non è fattibile mantenere un KMI stabile in mainline. Tuttavia, è possibile mantenere un KMI stabile nell'ambiente GKI altamente vincolato con questi vincoli:
Per creare il kernel è possibile utilizzare una sola configurazione,
gki_defconfig.Il KMI è stabile solo all'interno della stessa versione LTS e Android di un kernel, ad esempio
android14-6.1,android15-6.6oandroid16-6.12.- Non viene mantenuta la stabilità del KMI per
android-mainline.
- Non viene mantenuta la stabilità del KMI per
Per la creazione del kernel e dei moduli viene utilizzata solo la toolchain Clang specifica fornita in AOSP e definita per il ramo corrispondente.
Per la stabilità vengono monitorati e considerati simboli KMI solo i simboli che i moduli utilizzano, come specificato in un elenco di simboli.
- Il corollario è che i moduli del fornitore devono utilizzare solo simboli KMI. Questo vincolo viene applicato tramite il caricamento dei moduli non riuscito se sono richiesti simboli non KMI.
Dopo che il ramo KMI è stato bloccato, le modifiche sono consentite, ma non possono interrompere il KMI. Queste modifiche includono le seguenti:
- Modifiche alla configurazione
- Modifiche al codice del kernel
- Modifiche alla toolchain (inclusi gli aggiornamenti)
Utilizzare il processo di compilazione ermetico e la toolchain LLVM
Il processo di compilazione ermetico garantisce un KMI stabile facendo in modo che i manifest repo in kernel/manifest descrivano completamente l'ambiente di build. Ad esempio, il
manifest per android16-6.12
include la toolchain, il sistema di compilazione e tutto il resto necessario per creare il
kernel GKI (Generic Kernel Image). La configurazione di compilazione, principalmente
BUILD.bazel,
garantisce che gli strumenti inclusi vengano utilizzati correttamente per generare risultati di compilazione coerenti.
L'utilizzo di un processo di compilazione ermetico garantisce anche che la descrizione dell'ABI per l'
albero sia coerente, sia che venga generata da Google (ad esempio,
gki/aarch64/abi.stg
per android16-6.12) sia che venga generata in un albero locale che include i moduli del fornitore. Gli
strumenti per creare e confrontare la descrizione dell'ABI
per l'interfaccia del modulo kernel (KMI) sono forniti anche come parte del repository
descritto dal manifest.
La toolchain utilizzata per creare il kernel GKI deve essere completamente compatibile con la toolchain utilizzata per creare i moduli del fornitore. A partire da Android 10, tutti i kernel Android devono essere creati con una toolchain LLVM. Con GKI, la toolchain LLVM utilizzata per creare 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. È vivamente consigliato l'utilizzo degli strumenti di compilazione forniti, in quanto offrono la migliore compatibilità.
Passaggi successivi
Per istruzioni sulla creazione del kernel utilizzando il processo di compilazione ermetico e la toolchain LLVM, consulta Creare kernel.
Per istruzioni su come monitorare l'ABI e risolvere i problemi, consulta Monitoraggio dell'ABI del kernel Android