안정적인 KMI(Kernel Module Interface) 유지

공급업체 모듈에 대한 안정적인 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.15abi_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 모니터링 을 참조하세요.