Как запустить ABI-мониторинг

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

Автоматизация должна использовать код завершения команды сборки, который будет ненулевым, если будут обнаружены различия.

Обратите внимание, что ветки фазы разработки , включая 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 (Устройство) .

Старые версии ядра

Андроид 13

Инструкции по сборке в основном такие же, как в Android 14, за исключением того, что формат ABI — XML, а эталонное представление ABI — common/android/abi_gki_aarch64.xml .

Android 12 и более ранние версии

Как и в Android 13, формат ABI — 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 .