2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
안정적인 커널 모듈 인터페이스 유지
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
공급업체 모듈의 경우 안정적인 커널 모듈 인터페이스 (KMI)를 유지하는 것이 중요합니다. GKI 커널은 바이너리 형식으로 빌드되고 제공되지만 공급업체 로더블 모듈은 별도의 트리에 빌드됩니다. 그 결과로 생성되는 GKI 커널 및 공급업체 모듈은 함께 빌드된 것처럼 작동해야 합니다.
일반적으로 Linux 커뮤니티는 메인라인 커널에 대한 커널 내 ABI 안정성 개념을 그다지 좋아하지 않습니다. 다양한 도구 모음, 구성 및 끊임없이 진화하는 Linux 메인라인 커널에도 불구하고 메인라인에서 안정적인 KMI를 유지하는 것은 불가능합니다. 그러나 다음과 같은 제약 조건으로 고도로 제한된 GKI 환경에서 안정적인 KMI를 유지할 수 있습니다.
단일 구성 gki_defconfig
만 커널을 빌드하는 데 사용할 수 있습니다.
KMI는 커널의 동일한 LTS 및 Android 버전(예: android14-6.1
또는 android15-6.6
, android16-6.12
) 내에서만 안정적입니다.
android-mainline
에서는 KMI 안정성이 유지되지 않습니다.
AOSP에서 제공되고 해당 분기에 대해 정의된 특정 Clang 도구 모음만 커널 및 모듈 빌드에 사용됩니다.
기호 목록에 지정된 대로 모듈에서 사용하는 것으로 알려진 기호만 안정성을 위해 모니터링되고 KMI 기호로 간주됩니다.
- 결과적으로 공급업체 모듈은 KMI 기호만 사용해야 합니다. 모듈이 KMI 기호가 아닌 기호를 요구하면 모듈 로드가 실패함으로써 이 제약 조건이 강제 적용됩니다.
KMI 브랜치가 고정되면 변경사항이 허용되지만 KMI을 중단하지는 않습니다.
이러한 변경사항은 다음과 같습니다.
- 구성 변경사항
- 커널 코드 변경사항
- 도구 모음 변경사항(업데이트 포함)
밀폐 빌드 프로세스 및 LLVM 도구 모음 사용
밀폐 빌드 프로세스는 kernel/manifest
의 repo
매니페스트가 빌드 환경을 완전히 설명하도록 함으로써 안정적인 KMI를 보장합니다. 예를 들어 android16-6.12
의 매니페스트에는 도구 모음, 빌드 시스템, 일반 커널 이미지 (GKI) 커널을 빌드하는 데 필요한 다른 모든 항목이 포함되어 있습니다. 빌드 구성(주로 BUILD.bazel
)은 포함된 도구가 일관된 빌드 결과를 생성하는 데 올바르게 사용되도록 합니다.
밀폐 빌드 프로세스를 사용하면 트리의 ABI 설명이 Google에서 생성되었는지 (예: android16-6.12
의 gki/aarch64/abi.stg
) 공급업체 모듈이 포함된 로컬 트리에서 생성되었는지와 관계없이 일관성이 유지됩니다. 커널 모듈 인터페이스(KMI)의 ABI 설명을 생성하고 비교하는 도구도 매니페스트에 설명된 저장소의 일부로 제공됩니다.
GKI 커널을 빌드하는 데 사용되는 도구 모음은 공급업체 모듈을 빌드하는 데 사용되는 도구 모음과 완벽하게 호환되어야 합니다. Android 10부터 모든 Android 커널은 LLVM 도구 모음으로 빌드되어야 합니다. GKI 사용 시 제품 커널 및 공급업체 모듈을 빌드하는 데 사용되는 LLVM 도구 모음은 AOSP의 LLVM 도구 모음과 동일한 ABI를 생성해야 하며, 파트너는 KMI가 GKI 커널과 호환되는지 확인해야 합니다.
제공된 빌드 도구를 사용하는 것이 좋습니다. 최적의 호환성을 제공하기 때문입니다.
다음 단계
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 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)"]]