A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release
anziché aosp-main
per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Mantieni un'interfaccia del modulo del kernel stabile
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
È 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 android14-6.1
, android15-6.6
o android16-6.12
.
- La stabilità del KMI non viene mantenuta per
android-mainline
.
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)
Utilizza 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 android16-6.12
include la toolchain, il sistema di compilazione e tutto il resto necessario per compilare il kernel GKI (Generic Kernel Image). La configurazione di compilazione, principalmente
BUILD.bazel
,
assicura che gli strumenti inclusi vengano utilizzati correttamente per generare risultati di compilazione coerenti.
L'utilizzo di un processo di compilazione ermetico garantisce inoltre che la descrizione dell'ABI per la
struttura sia coerente, indipendentemente dal fatto che sia stata generata da Google (ad esempio,
gki/aarch64/abi.stg
per android16-6.12
) 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
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-07-27 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-07-27 UTC."],[],[],null,["# Maintain a stable kernel module interface\n\nIt's critical to maintain a stable kernel module interface (KMI) for vendor\nmodules. The GKI kernel is\nbuilt and shipped in binary form and vendor-loadable modules are built in a\nseparate tree. The resulting GKI kernel and vendor modules must work as\nthough they were built together.\n\nGenerally, the Linux community has\n[frowned on the notion of in-kernel ABI\nstability](https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst)\nfor the mainline kernel. In the face of different toolchains, configurations,\nand an ever-evolving Linux mainline kernel, it isn't feasible to maintain a\nstable KMI in mainline. However, it's possible to maintain a stable KMI in\nthe highly-constrained GKI environment with these constraints:\n\n- Only a single configuration, `gki_defconfig`, can be used to build the\n kernel.\n\n- The KMI is only stable within the same LTS and Android version of a kernel,\n such as `android14-6.1`, `android15-6.6` or `android16-6.12`.\n\n - No KMI stability is maintained for `android-mainline`.\n- Only the specific *Clang* toolchain supplied in AOSP and defined for the\n corresponding branch is used for building kernel and modules.\n\n- Only symbols known to be used by modules as specified in a symbol list are\n monitored for stability and considered KMI symbols.\n\n - The corollary is that vendor modules must use only KMI symbols. This constraint is enforced by failing module loads if non-KMI-symbols are required.\n- After the KMI branch is frozen, changes are allowed but can't break the KMI.\n These changes include the following:\n\n - Config changes\n - Kernel code changes\n - Toolchain changes (including updates)\n\nUse the hermetic build process and LLVM toolchain\n-------------------------------------------------\n\nThe hermetic build process ensures a stable KMI by having `repo` manifests in\n`kernel/manifest` completely describe the build environment. For example, the\n[manifest for `android16-6.12`](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android16-6.12/default.xml)\nincludes the toolchain, build system, and everything else required to build the\nGeneric Kernel Image (GKI) kernel. The build configuration, primarily\n[`BUILD.bazel`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/BUILD.bazel),\nensures that the included tools are used correctly to generate consistent build\nresults.\n\nUsing a hermetic build process also ensures that the ABI description for the\ntree is consistent whether generated by Google (for example,\n[`gki/aarch64/abi.stg`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/abi.stg)\nfor `android16-6.12`) or generated in a local tree that includes the vendor\nmodules. The\n[tools to create and compare the ABI description](https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/)\nfor the Kernel Module Interface (KMI) are also provided as part of the repo\ndescribed by the manifest.\n\nThe toolchain used to build the GKI kernel must be completely compatible with\nthe toolchain used to build vendor modules. As of Android\n10, all Android kernels must be built\nwith an LLVM toolchain. With GKI, the LLVM toolchain used to build product\nkernels and vendor modules must generate the same ABI as the LLVM toolchain from\nAOSP and partners must ensure that the KMI is compatible with the GKI kernel.\nUsing the provided build tools is strongly encouraged as they provide the\nbest compatibility.\n\nWhat's next?\n------------\n\n- For instructions on building the kernel using the hermetic build process and\n LLVM toolchain, refer to refer to\n [Build kernels](/docs/setup/build/building-kernels).\n\n- For instructions on how to monitor the ABI and fix issues, refer to\n [Android Kernel ABI Monitoring](/docs/core/architecture/kernel/abi-monitor)"]]