공급업체 모듈에 대한 안정적인 KMI를 유지하는 것이 중요합니다. GKI 커널은 바이너리 형태로 빌드되어 제공되며, 벤더가 로드할 수 있는 모듈은 별도의 트리에 빌드됩니다. 결과 GKI 커널과 공급업체 모듈은 함께 빌드된 것처럼 작동해야 합니다.
일반적으로 Linux 커뮤니티는 메인라인 커널에 대한 커널 내 ABI 안정성 개념에 눈살을 찌푸리게 합니다 . 다양한 툴체인, 구성 및 끊임없이 진화하는 Linux 메인라인 커널에 직면하여 메인라인에서 안정적인 KMI를 유지하는 것은 실현 가능하지 않습니다. 그러나 다음과 같은 제약 조건이 있는 고도로 제약된 GKI 환경에서 안정적인 KMI를 유지할 수 있습니다.
단일 구성
gki_defconfig
만 커널을 빌드하는 데 사용할 수 있습니다.KMI는
android13-5.10
,android12-5.10
또는android13-5.15
와 같은 커널의 동일한 LTS 및 Android 버전 내에서만 안정적입니다.-
android-mainline
에는 KMI 안정성이 유지되지 않습니다.
-
AOSP에서 제공되고 해당 분기에 대해 정의된 특정 Clang 도구 모음만 커널 및 모듈 빌드에 사용됩니다.
기호 목록에 지정된 대로 모듈에서 사용하는 것으로 알려진 기호만 안정성을 위해 모니터링되고 KMI 기호로 간주됩니다.
- 따라서 공급업체 모듈은 KMI 기호만 사용해야 합니다. 이 제약 조건은 KMI 기호가 아닌 기호가 필요한 경우 모듈 로드에 실패하면 적용됩니다.
KMI 분기가 고정된 후에는 변경이 허용되지만 KMI를 중단할 수는 없습니다. 이러한 변경 사항에는 다음이 포함됩니다.
- 구성 변경
- 커널 코드 변경
- 도구 체인 변경 사항(업데이트 포함)
밀폐형 빌드 프로세스 및 LLVM 도구 체인 사용
밀폐형 빌드 프로세스는 kernel/manifest
의 리포지토리가 빌드 환경을 완전히 설명하도록 하여 안정적인 repo
를 보장합니다. 예를 들어 android13-5.15
의 매니페스트 에는 도구 체인, 빌드 스크립트 및 GKI(Generic Kernel Image) 커널을 빌드하는 데 필요한 모든 것이 포함됩니다. GKI build config build.config.gki.aarch64
와 같은 각 build.config
구성 파일은 일관된 빌드 결과를 생성하기 위해 포함된 도구가 올바르게 사용되는지 확인합니다.
밀폐형 빌드 프로세스를 사용하면 Google에서 생성하든(예: android13-5.15
용 abi_gki_aarch64.xml
또는 공급업체 모듈을 포함하는 로컬 트리에서 생성하든 상관없이) 트리에 대한 ABI 설명이 일관성을 유지합니다. 생성 및 비교 도구 KMI(Kernel Module Interface)에 대한 ABI 설명 도 매니페스트에서 설명하는 리포지토리의 일부로 제공됩니다.
GKI 커널을 빌드하는 데 사용되는 도구 체인은 공급업체 모듈을 빌드하는 데 사용되는 도구 체인과 완전히 호환되어야 합니다. Android 10부터 모든 Android 커널은 LLVM 도구 모음으로 빌드해야 합니다. GKI를 사용하면 제품 커널 및 공급업체 모듈을 빌드하는 데 사용되는 LLVM 도구 체인이 AOSP의 LLVM 도구 체인과 동일한 ABI를 생성해야 하며 파트너는 KMI가 GKI 커널과 호환되는지 확인해야 합니다. 제공된 빌드 도구는 호환성을 보장하므로 사용하는 것이 좋습니다.
무엇 향후 계획?
밀폐형 빌드 프로세스 및 LLVM 도구 체인을 사용하여 커널을 빌드하는 방법에 대한 지침은 커널 빌드 를 참조하십시오.
ABI를 모니터링하고 문제를 해결하는 방법에 대한 지침은 Android 커널 ABI 모니터링 을 참조하세요.