В Android 10 и более поздних версиях общий образ системы (GSI), используемый для тестирования на соответствие требованиям CTS-on-GSI/VTS, был изменен с типа сборки userdebug на user, чтобы его можно было подписать для выпуска. Это проблема для тестирования VTS, поскольку для его запуска требуется adb root, а adb root недоступен на устройстве с пользовательской сборкой.
Отладочный RAM-диск (или отладочный загрузочный образ) используется для включения adb root на устройстве с пользовательской сборкой, загрузчик операционной системы которого разблокирован. Это упрощает процесс тестирования, поскольку для CTS-on-GSI и VTS-on-GSI используется одна и та же сборка GSI system.img. При настройке STS по-прежнему требуется использовать другую версию userdebug OEM system.img.
В таблице ниже приведены изменения в типах образов и сборок для тестирования на соответствие требованиям в Android 10.
| Набор тестов | Выбрать агент пользователя для проверки | Сборка | Отладка ramdisk | adb root? | Изменение варианта сборки Android 9 -> 10 |
|---|---|---|---|---|---|
| CTS | Система OEM | пользователь | НЕТ | НЕТ | Без изменений |
| CTS-on-GSI | GSI | пользователь | НЕТ | НЕТ | userdebug -> user GSI Выпуск подписан |
| STS | Система OEM-производителя | userdebug | НЕТ | Г | Новое в Q |
| VTS | GSI | пользователь | Г | Г | userdebug -> user GSI Выпуск подписан |
Обзор
Эти дополнительные графические файлы создаются в папке сборки (${ANDROID_PRODUCT_OUT}):
boot-debug.imgvendor_boot-debug.img
Когда boot-debug.img прошивается в раздел boot устройства, загружаются версия userdebug системного файла sepolicy и дополнительный файл свойств adb_debug.prop. Это позволяет использовать adb root со сборкой пользователя system.img (GSI или OEM).
На устройствах с общим образом ядра (GKI) и разделом vendor_boot не следует прошивать boot-debug.img, так как в раздел boot должен быть прошит сертифицированный образ GKI.
Вместо этого vendor_boot-debug.img следует записать в раздел vendor_boot, чтобы упростить отладку RAM-диска.
Требования для использования ramdisk отладки
Отладочный RAM-диск предоставляется OEM-производителем, который проводит тесты на соответствие требованиям. Она не должна быть подписана для выпуска и может использоваться только на разблокированном устройстве.
Отладочный виртуальный диск не будет создан или использован для обновления устройств, если:
BOARD_BUILD_SYSTEM_ROOT_IMAGEtrueskip_initramfsв командной строке ядра
Android 12 GSI
Чтобы использовать ramdisk для отладки с образом GSI Android 12, не нужны дополнительные инструкции.
С 29 сентября 2021 года для обновления отладочных виртуальных дисков больше не требуется инструмент repack_bootimg. Сборка GSI для Android 12 после SGR1.210929.001 (7777720) включает актуальный файл userdebug_plat_sepolicy.cil в system.img и игнорирует userdebug_plat_sepolicy.cil из отладочного RAM-диска. Подробную информацию можно найти в списках изменений.
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 с обновленными правилами sepolicy GSI.
Перепаковать виртуальный диск отладки
Вместо того чтобы вносить изменения в sepolicy для пересборки boot-debug.img, партнеры могут использовать repack_bootimg, чтобы обновить файл sepolicy GSI в 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 otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpСкачайте файл
userdebug_plat_sepolicy.cilилиboot-with-debug-ramdisk-${KERNEL_VERSION}.imgиз сборки GSI, которую вы используете. Например, если вы используете GSI arm64 из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 GKIrepack_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.cilboot-with-debug-ramdisk-${KERNEL_VERSION}.imgrepack_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 GKIrepack_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можно настроить в соответствии с конфигурациями устройства. Подробную информацию вы найдете в следующем разделе.
Путь к файлу sepolicy для userdebug
Приведенная выше команда 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 rootadb shell cat /proc/cmdline | grep force_normal_boot
В Android 12 и более поздних версиях путь в debug ramdisk всегда userdebug_plat_sepolicy.cil, независимо от того, есть ли androidboot.force_normal_boot=1 в командной строке ядра. В таблице ниже указаны пути в отладочном ОЗУ-диске в разных версиях Android.
| Отладочное изображение | Android 10 | Android 11 | Android 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 из Android 11 boot-with-debug-ramdisk-5.4.img в first_stage_ramdisk/userdebug_plat_sepolicy.cil в Android 11 vendor_boot-debug.img.
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-chained раздел, после выполнения команды repack_bootimg необходимо добавить нижний колонтитул AVB.
Например, перед запуском repack_bootimg выполните следующую команду, чтобы проверить, есть ли у vendor_boot-debug.img связанный нижний колонтитул AVB:
avbtool info_image --image vendor_boot-debug.imgЕсли в исходном файле есть цепочка нижних колонтитулов AVB, то после выполнения команды repack_bootimg необходимо добавить нижний колонтитул AVB после. Для подписи vendor_boot-debug.img можно использовать любой тестовый ключ, поскольку виртуальный диск отладки работает, только когда устройство разблокировано. Это позволяет использовать образы, подписанные нерелизными ключами, в разделе 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