È fondamentale mantenere un'interfaccia stabile per moduli del kernel (KMI) per il fornitore moduli. Il kernel GKI creati e spediti in formato binario e i moduli caricabili dal fornitore albero separato. Il kernel GKI e i moduli del fornitore devono funzionare come anche se sono stati costruiti insieme.
In genere, la community Linux ha disapprovato dalla nozione di ABI nel kernel stabilità per il kernel mainline. A fronte di diverse catene di strumenti, configurazioni e un kernel Linux in continua evoluzione, non è fattibile mantenere un un KMI stabile sul principale. Tuttavia, è possibile mantenere un KMI stabile l'ambiente GKI altamente vincolato con questi vincoli:
È possibile utilizzare una sola configurazione,
gki_defconfig
, per creare in un kernel.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
.- Non viene mantenuta alcuna stabilità KMI per
android-mainline
.
- Non viene mantenuta alcuna stabilità KMI per
Solo la toolchain specifica Clang fornita in AOSP e definita per il ramo corrispondente viene usato per creare kernel e moduli.
Solo i simboli noti per essere utilizzati dai moduli come specificato in un elenco di simboli sono monitorate per la stabilità e considerati simboli KMI.
- Il corollario è che i moduli del fornitore devono utilizzare solo simboli KMI. Questo Il vincolo viene applicato a causa di un caricamento non riuscito del modulo se vengono visualizzati simboli non KMI obbligatorio.
Dopo che il ramo KMI è stato bloccato, 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)
Utilizzo del processo di compilazione ermetico e della toolchain LLVM
Il processo di compilazione ermetico garantisce una KMI stabile facendo sì che repo
si manifesti in
kernel/manifest
descrivono completamente l'ambiente di build. Ad esempio,
manifest per android13-5.15
include la toolchain, gli script di build e tutto il necessario per creare
kernel GKI (Generic Kernel Image). La rispettiva configurazione di build.config
ad esempio la configurazione di compilazione GKI build.config.gki.aarch64
,
assicura che gli strumenti inclusi vengano utilizzati correttamente per generare build coerenti
che consentono di analizzare i dati
e visualizzare i risultati.
L'uso di un processo di compilazione ermetico garantisce anche che la descrizione dell'ABI per
sia coerente se generata da Google (ad esempio,
abi_gki_aarch64.xml
per android13-5.15
) o generati in una struttura locale che include il fornitore
moduli. La
strumenti per creare e confrontare la descrizione di ABI
per la Kernel Module Interface (KMI) sono anch'essi forniti come parte del repository
descritto dal file manifest.
La toolchain utilizzata per creare il kernel GKI deve essere completamente compatibile la toolchain usata per creare i moduli dei fornitori. A partire da Android 10, tutti i kernel Android devono essere creati con una toolchain LLVM. Con GKI, la toolchain LLVM utilizzata per creare il prodotto kernel e moduli del fornitore devono generare la stessa ABI della toolchain LLVM da AOSP e i partner devono garantire che il KMI sia compatibile con il kernel GKI. Ti consigliamo vivamente di utilizzare gli strumenti di creazione forniti, in quanto forniscono le la migliore compatibilità.
Passaggi successivi
Per istruzioni su come creare il kernel usando il processo di compilazione ermetico Toolchain LLVM, fare riferimento a Crea kernel.
Per istruzioni su come monitorare l'ABI e risolvere i problemi, consulta le Monitoraggio ABI del kernel Android