Testowanie VTS z debugowaniem ramdysku

Od wersji Androida 10 ogólny obraz systemu (GSI) używany do uruchamiania testów zgodności CTS-on-GSI/VTS został zmieniony z debugowania użytkownika na typ kompilacji użytkownika w celu podpisania wersji. Jest to problem w przypadku testowania VTS, ponieważ VTS wymaga do uruchomienia adb root , ale adb root nie jest dostępny na urządzeniu użytkownika.

Wprowadzono ramdysk debugowania (lub obraz rozruchowy debugowania), aby umożliwić adb root na urządzeniu użytkownika, którego program ładujący jest odblokowany . Upraszcza to przebieg testowania, korzystając z tego samego pliku GSI system.img który został stworzony przez użytkownika dla plików CTS-on-GSI i VTS-on-GSI. Do konfiguracji STS nadal wymagane jest użycie innego system.img OEM z debugowaniem użytkownika.

W poniższej tabeli przedstawiono zmiany obrazu i typu kompilacji na potrzeby testowania zgodności w systemie Android 10.

Zestaw testowy Przetestuj z Zbudować Debuguj ramdysk root adb? Zmiana wariantu kompilacji Androida 9 -> 10
CTS System OEM użytkownik N N Bez zmiany
CTS na GSI GSI użytkownik N N

userdebug -> GSI użytkownika

wydanie podpisane

STS System OEM debugowanie użytkownika N Y Nowość w Q
VTS GSI użytkownik Y Y

userdebug -> GSI użytkownika

wydanie podpisane

Przegląd

Te dodatkowe pliki obrazów są generowane w folderze kompilacji ( ${ANDROID_PRODUCT_OUT} ):

  • boot-debug.img
  • vendor_boot-debug.img

Po wgraniu boot-debug.img na partycję boot urządzenia ładowana jest wersja systemowego pliku sepolicy typu userdebug oraz dodatkowy plik właściwości, adb_debug.prop . Pozwala to na adb root z kompilacją użytkownika system.img (albo GSI, albo OEM).

W przypadku ogólnego obrazu jądra (GKI) korzystającego z urządzeń wyposażonych w partycję rozruchową vendor_boot nie można flashować boot-debug.img , ponieważ partycja boot musi być flashowana przy użyciu certyfikowanego obrazu GKI. Zamiast tego plik vendor_boot-debug.img powinien zostać wgrany na partycję vendor_boot , aby ułatwić debugowanie RAMdysku.

Warunki wstępne korzystania z dysku ramdysku debugowania

Ramdysk debugowania jest dostarczany przez producenta OEM przeprowadzającego testy zgodności. Nie może być podpisany i można go używać tylko wtedy, gdy urządzenie jest odblokowane.

Ramdysk debugowania nie zostanie wygenerowany ani użyty do aktualizacji urządzeń z:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE prawda
  • skip_initramfs w wierszu poleceń jądra

Androida 12GSI

Do korzystania z dysku ramdysku debugującego w systemie Android 12 GSI nie jest wymagana żadna dodatkowa instrukcja.

Począwszy od 29.09.2021 r., dyski ramdisk debugowania nie wymagają już aktualizacji za pomocą narzędzia repack_bootimg . Wersja Androida 12 GSI po SGR1.210929.001 (7777720) zawiera aktualny plik userdebug_plat_sepolicy.cil w pliku system.img i ignoruje userdebug_plat_sepolicy.cil z dysku ramdysku debugowania. Szczegółowe informacje można znaleźć w instrukcjach CL .

Androida 11GSI

Gdy używany jest plik boot-debug.img lub vendor_boot-debug.img , polityka systemowa jest ładowana z pliku userdebug_plat_sepolicy.cil na dysku ramdysku debugowania pliku boot-debug.img lub vendor_boot-debug.img . Aby uruchomić obrazy GSI, zawsze uwzględniaj aktualne zmiany sepolicy z gałęzi android11-gsi aby odbudować plik boot-debug.img lub vendor_boot-debug.img .

Alternatywnie można użyć narzędzia repack_bootimg do odbudowania pliku boot-debug.img lub vendor_boot-debug.img ze zaktualizowaną polityką GSI.

Przepakuj ramdysk debugowania

Zamiast włączać zmiany sepolicy do odbudowy boot-debug.img , partnerzy mogą użyć repack_bootimg do zaktualizowania pliku sepolicy GSI do boot-debug.img (lub vendor_boot-debug.img jeśli urządzenie korzysta z GKI).

Kroki są następujące:

  1. Pobierz plik otatools.zip z https://ci.android.com . Zalecamy pobranie z artefaktów kompilacji aosp_arm64-userdebug na aosp-main .

  2. Skonfiguruj środowisko wykonawcze dla repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Pobierz plik userdebug_plat_sepolicy.cil lub boot-with-debug-ramdisk-${KERNEL_VERSION}.img z używanej kompilacji GSI. Na przykład, jeśli używasz arm64 GSI z RJR1.211020.001 (7840830) , pobierz z https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest .

  4. Zaktualizuj urządzenie boot-debug.img lub vendor_boot-debug.img za pomocą 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
    

    Argumenty --ramdisk_add można dostosować w zależności od konfiguracji urządzenia. Szczegółowe wyjaśnienia można znaleźć w następnej sekcji .

Ścieżka sepolicy userdebug

Powyższy repack_bootimg kopiuje plik userdebug_plat_sepolicy.cil z ramdysku --src_bootimg na ramdysk --dst_bootimg . Jednak ścieżka na dysku ramdysku debugowania może być inna w różnych wersjach Androida. W Androidzie 10 i 11 ścieżka to first_stage_ramdisk/userdebug_plat_sepolicy.cil dla urządzeń z androidboot.force_normal_boot=1 w wierszu poleceń jądra. W przeciwnym razie ścieżka to userdebug_plat_sepolicy.cil .

Uruchom następującą komendę, aby sprawdzić, czy w wierszu poleceń jądra znajduje się androidboot.force_normal_boot :

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

Począwszy od Androida 12, ścieżka na dysku ramdysku debugowania to zawsze userdebug_plat_sepolicy.cil , niezależnie od istnienia androidboot.force_normal_boot=1 w wierszu poleceń jądra. W poniższej tabeli przedstawiono ścieżki na dysku ramdysku debugowania w różnych wersjach systemu Android.

Debuguj obraz Androida 10 Androida 11 Androida 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img Nie dotyczy first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
Boot-debug.img specyficzny dla urządzenia Zależy od force_normal_boot Zależy od force_normal_boot userdebug_plat_sepolicy.cil
Dostawcy_boot-debug.img specyficzny dla urządzenia Nie dotyczy Zależy od force_normal_boot userdebug_plat_sepolicy.cil

Możesz określić --ramdisk_add aby kopiować pliki z i do różnych ścieżek za pomocą listy par src_path:dst_path . Na przykład następujące polecenie kopiuje plik first_stage_ramdisk/userdebug_plat_sepolicy.cil z boot-with-debug-ramdisk-5.4.img Android 11 do pliku first_stage_ramdisk/userdebug_plat_sepolicy.cil w pliku 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

Jeśli w wierszu poleceń jądra nie ma androidboot.force_normal_boot=1 , wówczas polecenie powinno zostać dostosowane jak poniżej, aby zmienić ścieżkę docelową na 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

Jeśli obraz przekazany do --dst_bootimg jest skonfigurowany jako partycja połączona z AVB , po uruchomieniu komendy repack_bootimg należy dodać stopkę AVB.

Na przykład przed uruchomieniem repack_bootimg uruchom następujące polecenie, aby sprawdzić, czy plik vendor_boot-debug.img ma powiązaną stopkę AVB.

avbtool info_image --image vendor_boot-debug.img

Jeśli pierwotnie posiadał stopkę AVB połączoną w łańcuch, należy ją dodać po uruchomieniu komendy repack_bootimg . Użycie dowolnego klucza testowego do podpisania pliku vendor_boot-debug.img działa, ponieważ ramdysku debugowania można używać tylko wtedy, gdy urządzenie jest odblokowane, co pozwala na obrazy podpisane kluczem niezwolnionym na boot lub partycji 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