Запустите мониторинг ABI

На этой странице описывается, как создать представления ABI ядра Android и запустить мониторинг 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 и артефактов сборки, можно использовать опцию --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 отличаются следующим образом.

Android 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 .