В Android 10 и более поздних версиях тип сборки Generic System Image (GSI), используемый для тестирования соответствия стандартам CTS-on-GSI/VTS, изменился с userdebug на user build type, чтобы обеспечить возможность выпуска с цифровой подписью. Это создает проблему для тестирования VTS, поскольку для запуска VTS требуется adb root , но adb root недоступны на устройстве, собранном пользователем.
Отладочный образ оперативной памяти (или отладочный загрузочный образ) вводится для включения adb root на устройстве пользовательской сборки, у которого разблокирован загрузчик. Это упрощает процесс тестирования, используя один и тот же system.img GSI пользовательской сборки для CTS-on-GSI и VTS-on-GSI. Для настройки STS по-прежнему требуется использовать другой system.img OEM для отладки.
В таблице ниже показаны изменения образа и типа сборки для проверки соответствия требованиям в Android 10.
| Набор тестов | Тестирование с | Строить | Отладочный ramdisk | adb root? | Изменение варианта сборки Android 9 -> 10 |
|---|---|---|---|---|---|
| CTS | система OEM | пользователь | Н | Н | Без изменений |
| CTS-onGSI | ГСИ | пользователь | Н | Н | userdebug -> user GSI подписано соглашение о расторжении договора |
| СТС | система OEM | userdebug | Н | Я | Новое в Q |
| ВТС | ГСИ | пользователь | Я | Я | userdebug -> user GSI подписано соглашение о расторжении договора |
Обзор
Эти дополнительные файлы изображений создаются в папке сборки ( ${ANDROID_PRODUCT_OUT} ):
-
boot-debug.img -
vendor_boot-debug.img
При прошивке boot-debug.img в boot раздел устройства загружается отладочная версия файла политики безопасности системы и дополнительный файл свойств adb_debug.prop . Это позволяет использовать adb root , используя system.img созданный пользователем (как от GSI, так и от OEM-производителя).
Для устройств, использующих Generic Kernel Image (GKI) и имеющих раздел vendor_boot , прошивать boot-debug.img не нужно, поскольку boot раздел должен быть прошит сертифицированным образом GKI. Вместо этого, для обеспечения возможности отладки с помощью ramdisk, следует прошить vendor_boot-debug.img в раздел vendor_boot .
Предварительные условия для использования отладочного оперативного диска
Отладочный образ оперативной памяти предоставляется производителем оборудования, проводящим тесты на соответствие стандартам. Он не должен быть подписан официально и может использоваться только в том случае, если устройство разблокировано.
Отладочный образ оперативной памяти не будет создан и не будет использоваться для обновления устройств, имеющих следующие параметры:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGEtrue -
skip_initramfsв командной строке ядра
Android 12 GSI
Для использования отладочного оперативного диска с Android 12 GSI никаких дополнительных инструкций не требуется.
Начиная с 29.09.2021, отладочные образы в оперативной памяти больше не требуют обновления с помощью инструмента repack_bootimg . Сборка Android 12 GSI после SGR1.210929.001 (7777720) включает в свой system.img актуальный файл userdebug_plat_sepolicy.cil и игнорирует userdebug_plat_sepolicy.cil из отладочного образа в оперативной памяти. Подробности см. в CL .
Android 11 GSI
При использовании boot-debug.img или vendor_boot-debug.img системная политика безопасности загружается из файла userdebug_plat_sepolicy.cil , находящегося в отладочном оперативном диске boot-debug.img или vendor_boot-debug.img . Для загрузки образов GSI всегда используйте актуальные изменения политики безопасности из ветки 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 для обновления файла 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.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 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можно настроить в соответствии с конфигурацией устройства. Подробное объяснение приведено в следующем разделе .
Путь политики отладки пользователя
Приведённая выше repack_bootimg копирует файл userdebug_plat_sepolicy.cil из оперативной памяти, созданной с помощью параметра --src_bootimg , в оперативную память, созданную с помощью параметра --dst_bootimg . Однако путь внутри отладочной оперативной памяти может отличаться в разных версиях Android. В Android 10 и 11 путь к файлу userdebug_plat_sepolicy.cil для устройств с параметром androidboot.force_normal_boot=1 в командной строке ядра — first_stage_ramdisk/userdebug_plat_sepolicy.cil . В противном случае путь — userdebug_plat_sepolicy.cil .
Выполните следующую команду, чтобы проверить, присутствует ли параметр androidboot.force_normal_boot в командной строке ядра:
adb rootadb shell cat /proc/cmdline | grep force_normal_boot
В Android 12 и выше путь внутри отладочного образа оперативной памяти всегда равен 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 , после выполнения команды 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 работает, поскольку отладочный ramdisk можно использовать только при разблокированном устройстве, что позволяет использовать образы, подписанные не с помощью ключей выпуска, на 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