Mantenere stabile un'interfaccia del modulo del kernel (KMI)

È fondamentale mantenere una KMI stabile per i moduli del fornitore. 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 stabilità dell'ABI nel kernel 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 nella linea 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 o android13-5.15.

    • Non viene mantenuta alcuna stabilità KMI per android-mainline.
  • 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 in modo esaustivo l'ambiente di build. Ad esempio, manifest per android13-5.15 include la toolchain, gli script di build e tutto il resto 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 di 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