Начиная с Android 10, тип образа Generic System Image (GSI), используемый для тестирования соответствия CTS-on-GSI/VTS, был изменён с userdebug на user build для получения подписи на выпуск. Это создаёт проблему для тестирования VTS, поскольку для работы VTS требуется adb root
, но adb root
недоступен на устройстве с пользовательской сборкой.
Отладочный ramdisk (или отладочный загрузочный образ) добавлен для включения adb root
на устройстве пользовательской сборки с разблокированным загрузчиком. Это упрощает процесс тестирования благодаря использованию одного и того же образа system.img
пользовательской сборки GSI для CTS-on-GSI и VTS-on-GSI. Для настройки STS по-прежнему требуется другой образ system.img
пользовательской сборки OEM.
В следующей таблице показаны изменения образа и типа сборки для тестирования соответствия в Android 10.
Тестовый набор | Тест с | Строить | Отладочный ramdisk | adb root? | Изменение варианта сборки Android 9 -> 10 |
---|---|---|---|---|---|
КТС | Система OEM-производителей | пользователь | Н | Н | Никаких изменений. |
CTS-на-GSI | ГСИ | пользователь | Н | Н | userdebug -> пользовательский GSI релиз подписан |
СТС | Система OEM-производителей | отладка пользователя | Н | Y | Новое в Q |
СДС | ГСИ | пользователь | Y | Y | userdebug -> пользовательский GSI релиз подписан |
Обзор
Эти дополнительные файлы изображений создаются в папке сборки ( ${ANDROID_PRODUCT_OUT}
):
-
boot-debug.img
-
vendor_boot-debug.img
При записи boot-debug.img
в boot
раздел устройства загружаются версия userdebug системного файла sepolicy и дополнительный файл свойств adb_debug.prop
. Это позволяет использовать adb root
с пользовательской сборкой system.img
(как GSI, так и OEM).
Для образа Generic Kernel Image (GKI), использующего устройства с разделом vendor_boot
, boot-debug.img
не следует прошивать, так как boot
раздел должен быть прошит сертифицированным образом GKI. Вместо этого vendor_boot-debug.img
следует прошивать в раздел vendor_boot
для обеспечения отладочного RAM-диска.
Предварительные условия для использования отладочного RAM-диска
Отладочный RAM-диск предоставляется производителем оборудования, проводящим тесты на соответствие. Он не должен иметь подпись производителя и может использоваться только на разблокированном устройстве.
Отладочный электронный диск не будет создан или использован для обновления устройств с:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGE
правда -
skip_initramfs
в командной строке ядра
Android 12 GSI
Для использования отладочного ramdisk с Android 12 GSI не требуется дополнительных инструкций.
С 29.09.2021 отладочные виртуальные диски больше не требуют обновления с помощью инструмента repack_bootimg
. Сборка Android 12 GSI после SGR1.210929.001 (7777720)
включает актуальный файл userdebug_plat_sepolicy.cil
в свой system.img
и игнорирует userdebug_plat_sepolicy.cil
из отладочного виртуального диска. Подробности см. в CL .
Android 11 GSI
При использовании boot-debug.img
или vendor_boot-debug.img
системная политика sepolicy загружается из файла userdebug_plat_sepolicy.cil
на отладочном RAM-диске boot-debug.img
или vendor_boot-debug.img
. Для загрузки образов GSI всегда включайте актуальные изменения sepolicy из ветки android11-gsi
для пересборки boot-debug.img
или vendor_boot-debug.img
.
В качестве альтернативы можно использовать инструмент repack_bootimg
для пересборки boot-debug.img
или vendor_boot-debug.img
с обновленной политикой GSI.
Переупаковка отладочного ramdisk
Вместо включения изменений sepolicy для пересборки boot-debug.img
партнеры могут использовать repack_bootimg
для обновления файла GSI sepolicy в boot-debug.img
(или vendor_boot-debug.img
если устройство использует GKI).
Шаги следующие:
Загрузите
otatools.zip
с сайта https://ci.android.com . Мы рекомендуем использовать артефакты сборкиaosp_cf_arm64_only_phone-userdebug
в веткеaosp-android-latest-release
.Настройте среду выполнения для
repack_bootimg
:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
Загрузите файл
userdebug_plat_sepolicy.cil
илиboot-with-debug-ramdisk-${KERNEL_VERSION}.img
из используемой сборки GSI. Например, если вы используете сборку arm64 GSI изRJR1.211020.001 (7840830)
, загрузите её с сайта https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest .Обновите
boot-debug.img
илиvendor_boot-debug.img
устройства с помощьюuserdebug_plat_sepolicy.cil
:repack_bootimg --local --dst_bootimg boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
# If using GKI
repack_bootimg --local --dst_bootimg vendor_boot-debug.img \ --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
С
boot-with-debug-ramdisk-${KERNEL_VERSION}.img
:repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
# If using GKI
repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \ --dst_bootimg vendor_boot-debug.img \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \ --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
Аргументы
--ramdisk_add
можно настроить в соответствии с конфигурацией устройства. Подробное объяснение см. в следующем разделе .
Путь к политике отладки пользователя
Вышеуказанная команда repack_bootimg
копирует файл userdebug_plat_sepolicy.cil
из RAM-диска --src_bootimg
в RAM-диск --dst_bootimg
. Однако путь внутри отладочного RAM-диска может отличаться в разных версиях Android. В Android 10 и 11 путь выглядит следующим образом: first_stage_ramdisk/userdebug_plat_sepolicy.cil
для устройств с androidboot.force_normal_boot=1
в командной строке ядра. В противном случае путь выглядит следующим образом: userdebug_plat_sepolicy.cil
.
Выполните следующую команду, чтобы проверить наличие androidboot.force_normal_boot
в командной строке ядра:
adb root
adb shell cat /proc/cmdline | grep force_normal_boot
Начиная с Android 12, путь внутри отладочного RAM-диска всегда — userdebug_plat_sepolicy.cil
, независимо от наличия androidboot.force_normal_boot=1
в командной строке ядра. В следующей таблице показаны пути внутри отладочного RAM-диска в различных версиях Android.
Отладочное изображение | Андроид 10 | Андроид 11 | Андроид 12 |
---|---|---|---|
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img | Н/Д | first_stage_ramdisk/userdebug_plat_sepolicy.cil | userdebug_plat_sepolicy.cil |
boot-debug.img для конкретного устройства | Зависит от force_normal_boot | Зависит от force_normal_boot | userdebug_plat_sepolicy.cil |
vendor_boot-debug.img для конкретного устройства | Н/Д | Зависит от force_normal_boot | userdebug_plat_sepolicy.cil |
Вы можете указать --ramdisk_add
для копирования файлов из разных путей и в разные пути с помощью списка пар src_path:dst_path
. Например, следующая команда копирует файл first_stage_ramdisk/userdebug_plat_sepolicy.cil
из образа boot-with-debug-ramdisk-5.4.img
Android 11 в first_stage_ramdisk/userdebug_plat_sepolicy.cil
в образе vendor_boot-debug.img
Android 11.
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
Если в командной строке ядра нет androidboot.force_normal_boot=1
, то команду следует скорректировать, как указано ниже, чтобы изменить путь назначения на userdebug_plat_sepolicy.cil
.
repack_bootimg \
--src_bootimg boot-with-debug-ramdisk-5.4.img \
--dst_bootimg vendor_boot-debug.img \
--ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil
Добавить нижний колонтитул AVB
Если образ, переданный в --dst_bootimg
настроен как раздел с цепочкой AVB , после выполнения команды repack_bootimg
необходимо добавить нижний колонтитул AVB.
Например, перед запуском repack_bootimg
выполните следующую команду, чтобы проверить, имеет ли vendor_boot-debug.img
прикрепленный нижний колонтитул AVB.
avbtool info_image --image vendor_boot-debug.img
Если изначально в образе был прикреплён нижний колонтитул AVB, его необходимо добавить после выполнения команды repack_bootimg
. Использование любого тестового ключа для подписи файла vendor_boot-debug.img
работает, поскольку отладочный RAM-диск можно использовать только при разблокированном устройстве, что позволяет размещать образы без подписи ключа релиза в boot
или разделе vendor_boot
.
avbtool add_hash_footer --partition_name vendor_boot \
--partition_size 100663296 \
--algorithm SHA256_RSA4096 \
--key otatools/external/avb/test/data/testkey_rsa4096.pem \
--image vendor_boot-debug.img