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