На этой странице описано, как создавать представления 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 .
Android 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 .