Hata ayıklama ramdisk'i ile VTS testi

Android 10'dan itibaren, GSI/VTS'de CTS uygunluk testini çalıştırmak için kullanılan Genel Sistem Görüntüsü (GSI), sürüm imzalanabilmesi için userdebug yerine kullanıcı derleme türüne değiştirildi. VTS, adb root'in çalışmasını gerektirir ancak adb root, kullanıcı tarafından oluşturulan cihazlarda kullanılamaz. Bu nedenle, VTS testi için sorun teşkil eder.

Hata ayıklama ramdisk'i (veya hata ayıklama önyükleme görüntüsü), bootloader'ı kilitli olmayan kullanıcı derlemesi cihazlarda adb root'ü etkinleştirmek için kullanıma sunulmuştur. Bu, GSI'de CTS ve GSI'de VTS için aynı kullanıcı derleme GSI'sini system.img kullanarak test akışını basitleştirir. STS kurulumu için başka bir userdebug OEM system.img kullanmaya devam etmeniz gerekir.

Aşağıdaki tabloda, Android 10'daki uygunluk testi için resim ve derleme türü değişiklikleri gösterilmektedir.

Test paketi Şunlarla test edin: Topluluk RAM diskinde hata ayıklama adb root? Android 9 -> 10 derleme değişkeni değişikliği
CTS OEM'nin sistemi kullanıcı H H Değiştirmedi
GSI'de CTS GSI kullanıcı H H

userdebug -> user GSI

imzalı sürüm

STS OEM'nin sistemi userdebug H Y Q'da yeni
VTS GSI kullanıcı Y Y

userdebug -> user GSI

imzalı sürüm

Genel Bakış

Bu ek resim dosyaları, derleme klasörü (${ANDROID_PRODUCT_OUT}) altında oluşturulur:

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

boot-debug.img, cihazın boot bölümüne yüklendiğinde sistem sepolicy dosyasının userdebug sürümü ve ek bir özellik dosyası (adb_debug.prop) yüklenir. Bu, kullanıcı derlemesi system.img (GSI'ler veya OEM'ler) ile adb root'e izin verir.

vendor_boot bölümüne sahip cihazlarda Genel Çekirdek Görüntüsü (GKI) kullanılırken boot bölümü sertifikalı bir GKI görüntüsüyle yazılacağından boot-debug.img yazılmamalıdır. Bunun yerine, ramdisk'te hata ayıklama işlemini kolaylaştırmak için vendor_boot-debug.img, vendor_boot bölümüne yazılmalıdır.

Hata ayıklama ramdisk'ini kullanmayla ilgili ön koşullar

Hata ayıklama ramdisk'i, uygunluk testlerini çalıştıran OEM tarafından sağlanır. Sürüm imzalanmamış olmalıdır ve yalnızca cihazın kilidi açıkken kullanılabilir.

Hata ayıklama ramdisk'i, aşağıdaki özelliklere sahip cihazları yükseltmek için oluşturulmaz veya kullanılmaz:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE true
  • Çekirdek komut satırında skip_initramfs

Android 12 GSI

Android 12 GSI ile hata ayıklama ramdisk'ini kullanmak için ek talimat gerekmez.

29.09.2021'den itibaren hata ayıklama ramdisk'lerinin repack_bootimg aracıyla güncellenmesi gerekmeyecek. SGR1.210929.001 (7777720)'ten sonraki Android 12 GSI derlemesi, güncel userdebug_plat_sepolicy.cil dosyasını system.img içine alır ve hata ayıklama ramdisk'indeki userdebug_plat_sepolicy.cil dosyasını yoksayar. Ayrıntılar için CL'lere bakın.

Android 11 GSI

boot-debug.img veya vendor_boot-debug.img kullanıldığında sistem se politikası, boot-debug.img veya vendor_boot-debug.img'un hata ayıklama ram diskindeki userdebug_plat_sepolicy.cil dosyasından yüklenir. GSI resimlerini başlatmak için lütfen boot-debug.img veya vendor_boot-debug.img'inizi yeniden oluşturmak üzere android11-gsi dalındaki güncel sepolicy değişikliklerini her zaman dahil edin.

Alternatif olarak, repack_bootimg aracı güncellenmiş GSI güvenlik politikasıyla bir boot-debug.img veya vendor_boot-debug.img yeniden oluşturmak için kullanılabilir.

Hata ayıklama ramdisk'ini yeniden paketleme

yer almaktadır.

İş ortakları, boot-debug.img dosyasını yeniden oluşturmak için sepolicy değişikliklerini dahil etmek yerine repack_bootimg'ü kullanarak GSI sepolicy dosyasını boot-debug.img (veya cihaz GKI kullanıyorsa vendor_boot-debug.img) olarak güncelleyebilir.

Adımlar aşağıdaki gibidir:

  1. otatools.ziphttps://ci.android.com adresinden indirin. aosp-main'te aosp_arm64-userdebug derleme yapılarını indirmenizi öneririz.

  2. repack_bootimg için yürütme ortamını ayarlayın:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
  3. Kullandığınız GSI derlemesinden userdebug_plat_sepolicy.cil veya boot-with-debug-ramdisk-${KERNEL_VERSION}.img dosyasını indirin. Örneğin, RJR1.211020.001 (7840830)'den arm64 GSI kullanıyorsanız https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest adresinden indirin.

  4. boot-debug.img veya vendor_boot-debug.img cihazını userdebug_plat_sepolicy.cil ile güncelleyin:

    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 ile:

    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 bağımsız değişkenleri, cihaz yapılandırmalarına göre ayarlanabilir. Ayrıntılı açıklama için sonraki bölüme bakın.

userdebug sepolicy dosyasının yolu

Yukarıdaki repack_bootimg, userdebug_plat_sepolicy.cil dosyasını --src_bootimg'nin ramdisk'inden --dst_bootimg'ın ramdisk'ine kopyalar. Ancak hata ayıklama ramdisk'indeki yol, farklı Android sürümlerinde farklı olabilir. Android 10 ve 11'de, çekirdek komut satırında androidboot.force_normal_boot=1 bulunan cihazlar için yol first_stage_ramdisk/userdebug_plat_sepolicy.cil'tür. Aksi takdirde yol userdebug_plat_sepolicy.cil olur.

Çekirdek komut satırında androidboot.force_normal_boot olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın:

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

Android 12'den itibaren, çekirdek komut satırında androidboot.force_normal_boot=1'ün varlığına bakılmaksızın, hata ayıklama ramdisk'indeki yol her zaman userdebug_plat_sepolicy.cil olur. Aşağıdaki tabloda, farklı Android sürümlerindeki hata ayıklama ramdisk'indeki yollar gösterilmektedir.

Görüntüyü hata ayıklama Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img Yok first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
Cihaza özel boot-debug.img force_normal_boot değerine bağlıdır force_normal_boot değerine bağlıdır userdebug_plat_sepolicy.cil
Cihaza özel vendor_boot-debug.img Yok force_normal_boot değerine bağlıdır userdebug_plat_sepolicy.cil

src_path:dst_path çiftleri listesi ile dosyaları farklı yollardan kopyalamak için --ramdisk_add'ü belirtebilirsiniz. Örneğin, aşağıdaki komut first_stage_ramdisk/userdebug_plat_sepolicy.cil dosyasını bir Android 11 boot-with-debug-ramdisk-5.4.img cihazdan bir Android 11 vendor_boot-debug.img cihazdaki first_stage_ramdisk/userdebug_plat_sepolicy.cil konumuna kopyalar.

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

Çekirdek komut satırında androidboot.force_normal_boot=1 yoksa hedef yolu userdebug_plat_sepolicy.cil olarak değiştirmek için komut aşağıdaki gibi ayarlanmalıdır.

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

--dst_bootimg'e iletilen resim AVB zincirli bir bölüm olarak yapılandırılmışsa repack_bootimg komutu çalıştırıldıktan sonra bir AVB altbilgisi eklenmesi gerekir.

Örneğin, repack_bootimg'yi çalıştırmadan önce, bir vendor_boot-debug.img'ın zincirlenmiş AVB altbilgisi olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın.

avbtool info_image --image vendor_boot-debug.img

Orijinal olarak zincirlenmiş bir AVB altbilgisi varsa repack_bootimg komutunun ardından bir AVB altbilgisi eklenmelidir. vendor_boot-debug.img'ü imzalamak için herhangi bir test anahtarı kullanmak işe yarar. Bunun nedeni, hata ayıklama ramdisk'inin yalnızca cihazın kilidi açıldığında kullanılabilmesidir. Bu da boot veya vendor_boot bölümünde, sürüm anahtarı ile imzalanmamış resimlere izin verir.

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