Hata ayıklama ram diskiyle 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, CTS-on-GSI ve VTS-on-GSI için aynı kullanıcı derlemesi GSI system.img'sini kullanarak test akışını basitleştirir. STS kurulumu için başka bir kullanıcı hata ayıklama OEM'sinin (system.img) kullanılması yine de gereklidir.

Aşağıdaki tabloda, Android 10'da uyumluluk testi için yapılan görüntü ve derleme türü değişiklikleri gösterilmektedir.

Test paketi Şununla test et: 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'in sistemi kullanıcı hata ayıklama H Y Q'daki yenilikler
VTS GSI kullanıcı Y Y

userdebug -> user GSI

imzalı sürüm

Genel Bakış

Bu ek görüntü 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, system.img (GSI veya OEM'ler) derlemesi ile adb root kullanılmasına olanak tanır.

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 RAM'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 boot-debug.img veya vendor_boot-debug.img'inizi yeniden oluşturmak üzere lütfen her zaman android11-gsi dalındaki güncel sepolicy değişikliklerini 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 öğesini yeniden derlemek için sepolicy değişikliklerini uygulamak yerine repack_bootimg kullanarak GSI sepolicy dosyasını boot-debug.img (veya cihaz GKI kullanıyorsa vendor_boot-debug.img) ile güncelleyebilir.

İlgili adımlar aşağıda verilmiştir:

  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 varlığından bağımsız olarak, hata ayıklama önbelleğinin içindeki yol her zaman userdebug_plat_sepolicy.cil şeklindedir. Aşağıdaki tabloda, farklı Android sürümlerindeki hata ayıklama ramdisk'indeki yollar gösterilmektedir.

Resimde hata ayıkla 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'a bağlıdır userdebug_plat_sepolicy.cil
Cihaza özel vendor_boot-debug.img Yok force_normal_boot'a bağlıdır userdebug_plat_sepolicy.cil

src_path:dst_path çiftlerinden oluşan bir listeyle farklı yollara dosya kopyalamak için --ramdisk_add belirtebilirsiniz. Örneğin, aşağıdaki komut, first_stage_ramdisk/userdebug_plat_sepolicy.cil dosyasını Android 11 vendor_boot-debug.img içinde Android 11 boot-with-debug-ramdisk-5.4.img sürümünden first_stage_ramdisk/userdebug_plat_sepolicy.cil uygulamasına 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 komut, hedef yolunu userdebug_plat_sepolicy.cil olarak değiştirmek için 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 hizmetine iletilen görüntü AVB zincirli bölüm olarak yapılandırılmışsa repack_bootimg komutu çalıştırıldıktan sonra 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. Hata ayıklama belleğinin yalnızca cihazın kilidi açıkken kullanılabilmesi nedeniyle vendor_boot-debug.img öğesini imzalamak için herhangi bir test anahtarı kullanılabilir. Bu da boot veya vendor_boot bölümünde yayınlanmayan anahtar imzalı görüntülere 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