На этой странице описывается, как построить представления ABI ядра Android и запустить мониторинг ABI. Это применимо к Android 16 и выше. Для более низких версий см. ABI monitor previous kernel versions .
Также см. справочную документацию по 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 и собрать артефакты, вы можете использовать опцию --destdir
:
tools/bazel run //common:kernel_aarch64_abi_dist -- --destdir=out/dist
Проанализируйте различия ABI между сборкой и эталонным представлением.
Цель //common:kernel_aarch64_abi_dist
, выполненная в предыдущей команде, анализирует и сообщает о любых различиях ABI, найденных между сборкой и эталонным представлением, расположенным в common/gki/aarch64/abi.stg
(определено в BUILD.bazel
). Эти различия выводятся в конце сборки, как показано в следующем примере:
INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!
Печатный отчет берется из артефакта сборки, расположенного в $DIST_DIR/abi_stgdiff/abi.report.short
вместе с отчетами в других форматах.
Автоматизация должна использовать код выхода команды сборки, который не равен нулю, если обнаружены различия.
Обратите внимание, что ветви фазы разработки , включая android-mainline
, не имеют справочного представления 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 необходимо настроить только для основных целевых сборок ядра. Смешанные конфигурации сборки (определяющие base_kernel
), которые компилируются напрямую с ядром GKI , должны только добавить поддержку отслеживания списка символов устройства . Определение ABI следует обновить с помощью сборки GKI.
Также см. справочную документацию по Kleaf: Поддержка мониторинга ABI (устройство) .
ABI-монитор предыдущих версий ядра (Android 15 и ниже)
Для предыдущих версий ядра инструкции по сборке и мониторингу ABI отличаются следующим образом.
Андроид 15 и 14
Инструкции в основном такие же, как и в Android 16, за исключением того, что справочное представление ABI — common/android/abi_gki_aarch64.stg
, а $DIST_DIR
по умолчанию — out_abi/kernel_aarch64/dist
.
Андроид 13
Android 13 может быть собран либо с помощью Kleaf, либо с помощью устаревших скриптов сборки.
Для Kleaf инструкции такие же, как и для Android 14, за исключением того, что форматом ABI является XML, а справочным представлением ABI является common/android/abi_gki_aarch64.xml
.
Для устаревших скриптов сборки инструкции такие же, как для Android 12.
Android 12 и ниже
Формат ABI — XML, а справочное представление ABI — common/android/abi_gki_aarch64.xml
Эти ядра используют build.sh
вместо Kleaf. Для мониторинга ABI следует использовать build_abi.sh
, который принимает те же переменные среды для настройки сборки, что и build.sh
. Например:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh
Это собирает ядро и извлекает представление ABI в подкаталог OUT_DIR
(по умолчанию это out_abi
), что эквивалентно цели //common:kernel_aarch64_abi_dist
Kleaf (см. Сборка ядра и артефактов ABI ).
Справочное представление ABI хранится в android/abi_gki_aarch64.xml
как определено переменной ABI_DEFINITION
в common/build.config.gki.aarch64
.
Если вам необходимо обновить представление ABI ядра, наиболее удобный способ — использовать параметры --update
и --print-report
:
BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report
--print-report
выводит различия ABI между существующим файлом и вновь сгенерированным ABI.
Параметр --update
перезаписывает ссылочное представление ABI. Он также обновляет список символов при использовании BUILD_CONFIG
для устройства с настроенным KMI_SYMBOL_LIST
.