이 섹션에서는 Android 커널 ABI 표현을 빌드하고 ABI 모니터링을 실행하는 방법을 설명합니다. 여기에서 설명하는 내용은 Android 14 이상에 적용됩니다. 이전 버전의 경우 이전 커널 버전을 참고하세요.
또한 Kleaf 관련 참조 문서인 지원 ABI 모니터링(GKI) 및 지원 ABI 모니터링(기기)을 확인하세요.
커널 및 ABI 표현 빌드
GKI 소스를 다운로드한 후 다음 명령어를 실행하여 GKI 커널 및 ABI 아티팩트를 빌드하세요.
tools/bazel run //common:kernel_aarch64_abi_dist
이 명령어는 현재 ABI 표현을 빌드하고 빌드된 커널 및 모듈과 함께 out_abi/kernel_aarch64/dist/abi.stg
에 이를 복사합니다.
--
뒤의 명령어 끝에 ABI 도구의 추가 인수를 지정할 수 있습니다. 예를 들어 ABI의 대상을 변경하고 아티팩트를 빌드하려면 --dist_dir
옵션을 사용하면 됩니다.
tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist
빌드와 참조 표현 간의 ABI 차이 분석
위 명령어에서 실행된 //common:kernel_aarch64_abi_dist
타겟은 common/android/abi_gki_aarch64.stg
(BUILD.bazel에서 정의됨)에 있는 빌드 및 참조 표현 간에 발견된 ABI 차이를 분석하고 보고합니다.
이러한 차이는 다음 예와 같이 빌드 끝부분에 출력됩니다.
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
출력된 보고서는 다른 형식의 보고서와 함께 out_abi/kernel_aarch64/dist/abi_stgdiff/abi.report.short
에 있는 빌드 아티팩트에서 가져옵니다.
자동화는 빌드 명령어의 종료 코드를 사용해야 하며 이는 차이가 발견되면 0이 아닙니다.
android-mainline
을 비롯한 개발 단계 브랜치에는 참조 ABI 표현이 없습니다.
참조 ABI 표현 없으면 //common:kernel_aarch64_abi_dist
에서 어떠한 차이도 감지하지 못합니다.
참조 ABI 표현 업데이트
커널 ABI에 영향을 미치는 변경사항(예: 기호 목록 업데이트)은 참조 ABI 표현(common/android/abi_gki_aarch64.stg
, BUILD.bazel에 정의됨)에 반영되어야 합니다.
이를 위해서는 다음 명령어를 실행해야 합니다.
tools/bazel run //common:kernel_aarch64_abi_update
이 명령어는 ABI 차이 분석 단계의 모든 작업을 실행하고 추가로 소스의 참조 표현을 업데이트합니다. 그러면 업데이트된 ABI는 변경사항과 동일한 커밋에 업로드될 수 있습니다. 보고서의 ABI 차이를 커밋 메시지의 $DIST_DIR/abi.report.short
에 포함하세요.
ABI 모니터링 및 기기 타겟
ABI 모니터링은 핵심 커널 빌드 타겟에 관해서만 구성해야 합니다. GKI 커널로 직접 컴파일되는 혼합된 빌드 구성(base_kernel
을 정의하는 빌드 구성)은 기기 기호 목록을 추적하는 지원만 추가하면 됩니다.
ABI 정의는 GKI 빌드를 사용하여 업데이트되어야 합니다.
또한 Kleaf 관련 참조 문서인 지원 ABI 모니터링(기기)을 확인하세요.
이전 커널 버전
Android 13
빌드 안내는 ABI 형식이 XML이고 참조 ABI 표현이 common/android/abi_gki_aarch64.xml
인 점을 제외하고 대부분 Android 14와 동일합니다.
Android 12 이하
Android 13과 마찬가지로 ABI 형식은 XML입니다.
이전 터널은 Kleaf 대신 build.sh
를 사용합니다. ABI 모니터링의 경우 build_abi.sh
를 사용해야 하며 이는 빌드를 맞춤설정하기 위해 build.sh
와 동일한 환경 변수를 허용합니다. 예를 들면 다음과 같습니다.
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
이렇게 하면 커널이 빌드되고 OUT_DIR
(기본적으로 out_abi
) 하위 디렉터리로 ABI 표현이 추출되며 Kleaf의 //common:kernel_aarch64_abi_dist
타겟과 동일하게 처리됩니다(빌드 커널 및 ABI 아티팩트 참고).
참고 ABI 표현은 common/build.config.gki.aarch64
에서 ABI_DEFINITION
변수에 의해 정의된 바와 같이 android/abi_gki_aarch64.xml
에 저장됩니다.
커널 ABI 표현을 업데이트해야 하는 경우 가장 쉬운 방법은 --update
및 --print-report
옵션을 사용하는 것입니다.
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
는 기존 파일과 새로 생성된 ABI 간 ABI 차이를 출력합니다.
--update
옵션은 참조 ABI 표현을 덮어씁니다. 또한 KMI_SYMBOL_LIST
가 구성된 기기에 BUILD_CONFIG
를 사용하는 경우에도 기호 목록을 업데이트합니다.