ABI 모니터링 실행

이 페이지에서는 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 타겟 빌드와 참조 간에 발견된 ABI 차이를 분석하고 보고 common/android/abi_gki_aarch64.stg에 있는 표현( BUILD.bazel)을 클릭합니다. 이러한 차이점은 다음에서 볼 수 있듯이 빌드 끝부분에 출력됩니다. 다음 예를 참고하세요.

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 표현이 없습니다. 이 태그가 없으면 //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 모니터링은 핵심 커널 빌드 타겟에 관해서만 구성해야 합니다. 혼합 다음을 사용하여 직접 컴파일되는 빌드 구성 (base_kernel를 정의하는 빌드 구성) GKI 커널은 기기 기호 추적 지원만 추가하면 됨 목록에 있습니다. ABI 정의는 GKI 빌드를 사용하여 업데이트되어야 합니다.

Kleaf 관련 참조 문서도 확인하세요. ABI 모니터링 지원 (기기)

이전 커널 버전

Android 13

빌드 명령은 ABI 형식이 XML이고 참조 ABI 표현은 common/android/abi_gki_aarch64.xml입니다.

Android 13 및 이전 버전

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를 사용하는 경우에도 기호 목록을 업데이트합니다.