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