안정적인 커널 모듈 인터페이스(KMI) 유지

공급업체 모듈의 경우 안정적인 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/manifestrepo 매니페스트가 빌드 환경을 완전히 설명하도록 함으로써 안정적인 KMI를 보장합니다. 예를 들어 android13-5.15의 매니페스트에는 도구 모음, 빌드 스크립트, 일반 커널 이미지(GKI) 커널을 빌드하는 데 필요한 다른 모든 항목이 포함되어 있습니다. 각각의 build.config 구성 파일(예: GKI 빌드 구성 build.config.gki.aarch64)은 포함된 도구가 일관된 빌드 결과를 생성하는 데 올바르게 사용되도록 합니다.

밀폐 빌드 프로세스를 사용하면 트리의 ABI 설명이 Google에서 생성되었는지(예: android13-5.15abi_gki_aarch64.xml) 공급업체 모듈이 포함된 로컬 트리에서 생성되었는지와 관계없이 일관성이 유지됩니다. 커널 모듈 인터페이스(KMI)의 ABI 설명을 생성하고 비교하는 도구도 매니페스트에 설명된 저장소의 일부로 제공됩니다.

GKI 커널을 빌드하는 데 사용되는 도구 모음은 공급업체 모듈을 빌드하는 데 사용되는 도구 모음과 완벽하게 호환되어야 합니다. Android 10부터 모든 Android 커널은 LLVM 도구 모음으로 빌드되어야 합니다. GKI 사용 시 제품 커널 및 공급업체 모듈을 빌드하는 데 사용되는 LLVM 도구 모음은 AOSP의 LLVM 도구 모음과 동일한 ABI를 생성해야 하며, 파트너는 KMI가 GKI 커널과 호환되는지 확인해야 합니다. 호환성을 보장하는 제공된 빌드 도구를 사용하는 것이 좋습니다.

다음 단계

  • 밀폐 빌드 프로세스와 LLVM 도구 모음을 사용하여 커널을 빌드하는 방법에 관한 안내는 빌드 커널을 참고하세요.

  • ABI를 모니터링하고 문제를 해결하는 방법은 Android 커널 ABI 모니터링을 참고하세요.