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