Hata ayıklama ramdisk'i ile VTS testi

Android 10'dan itibaren, CTS-on-GSI/VTS uygunluk testini çalıştırmak için kullanılan Generic System Image (GSI), yayın için imzalanabilmesi amacıyla userdebug'dan kullanıcı derleme türüne değiştirildi. VTS'nin çalışması için adb root gerekir ancak adb root, kullanıcı derlemesi cihazda kullanılamadığından bu durum VTS testi için sorun teşkil eder.

Hata ayıklama ramdiski (veya hata ayıklama önyükleme görüntüsü), bootloader'ı kilidi açılmış olan bir kullanıcı derlemesi cihazda adb root'yı etkinleştirmek için kullanılır. Bu, CTS-on-GSI ve VTS-on-GSI için aynı kullanıcı derlemesi GSI'yi system.img kullanarak test akışını basitleştirir. STS kurulumu için başka bir userdebug OEM system.img kullanılması hâlâ gereklidir.

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

Test paketi Şununla test et: Derle ramdisk'te hata ayıklama adb root? Android 9 -> 10 derleme değişkeni değişikliği
CTS OEM'in sistemi kullanıcı N N Değiştirmedi
CTS-on-GSI GSI kullanıcı N N

userdebug -> user GSI

release signed

STS OEM'in sistemi userdebug N Y Q'daki yenilikler
VTS GSI kullanıcı Y Y

userdebug -> user GSI

release signed

Genel Bakış

Bu ek resim dosyaları, derleme klasöründe (${ANDROID_PRODUCT_OUT}) 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ı olan adb_debug.prop yüklenir. Bu, kullanıcı derlemesi adb root ile system.img (GSI'ler veya OEM'ler) kullanılmasına olanak tanır.

vendor_boot bölümü olan cihazlarda Genel Çekirdek Görüntüsü (GKI) için boot-debug.img yazılmamalıdır. boot bölümüne sertifikalı bir GKI görüntüsü yazılmalıdır. Bunun yerine, hata ayıklama ramdisk'ini kolaylaştırmak için vendor_boot-debug.img, vendor_boot bölümüne yüklenmelidir.

Hata ayıklama ramdiski kullanmanın ön koşulları

Hata ayıklama ramdiski, uygunluk testlerini çalıştıran OEM tarafından sağlanır. Yayın imzalı olmamalıdır ve yalnızca cihazın kilidi açıkken kullanılabilir.

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

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE doğru
  • skip_initramfs çekirdek komut satırında

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 ramdisklerinin artık repack_bootimg aracıyla güncellenmesi gerekmiyor. SGR1.210929.001 (7777720) sonrası Android 12 GSI derlemesi, system.img dosyasında güncel userdebug_plat_sepolicy.cil dosyasını içerir ve hata ayıklama ramdisk'indeki userdebug_plat_sepolicy.cil dosyasını yoksayar. Ayrıntılar için değişiklik listelerine bakın.

Android 11 GSI

boot-debug.img veya vendor_boot-debug.img kullanıldığında sistem sepolicy, boot-debug.img veya vendor_boot-debug.img'nin hata ayıklama ramdisk'indeki userdebug_plat_sepolicy.cil dosyasından yüklenir. GSI görüntülerini başlatmak için lütfen boot-debug.img veya vendor_boot-debug.img'nizi yeniden oluşturmak üzere android11-gsi dalındaki güncel sepolicy değişikliklerini her zaman dahil edin.

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

Hata ayıklama ramdisk'ini yeniden paketleme

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

Adımlar aşağıdaki gibidir:

  1. otatools.zip dosyasını https://ci.android.com adresinden indirin. aosp_cf_arm64_only_phone-userdebug'ün aosp-android-latest-release dalındaki derleme yapıtlarından 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) adresinden bir arm64 GSI kullanıyorsanız https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest adresinden indirin.

  4. Cihazı boot-debug.img veya vendor_boot-debug.img ile userdebug_plat_sepolicy.cil olarak 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'nın 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'nin yolu

Yukarıdaki komut, repack_bootimg dosyasını --src_bootimg ramdisk'inden --dst_bootimg ramdisk'ine kopyalar.userdebug_plat_sepolicy.cil Ancak hata ayıklama ramdisk'indeki yol, farklı Android sürümlerinde farklı olabilir. Android 10 ve 11'de yol, çekirdek komut satırında first_stage_ramdisk/userdebug_plat_sepolicy.cil olan cihazlar için first_stage_ramdisk/userdebug_plat_sepolicy.cil şeklindedir.androidboot.force_normal_boot=1 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 olup olmadığı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 bir hata ayıklama ramdisk'indeki yollar gösterilmektedir.

Hata ayıklama resmi 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'a 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

--ramdisk_add çiftlerinin listesiyle dosyaları farklı yollardan kopyalamak için src_path:dst_path belirtebilirsiniz. Örneğin, aşağıdaki komut, Android 11 boot-with-debug-ramdisk-5.4.img cihazındaki first_stage_ramdisk/userdebug_plat_sepolicy.cil dosyasını Android 11 vendor_boot-debug.img cihazındaki 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 öğesine iletilen resim AVB zincirli 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 komutunu çalıştırmadan önce, vendor_boot-debug.img öğesinin zincirleme AVB altbilgisine sahip olup olmadığını kontrol etmek için aşağıdaki komutu çalıştırın.

avbtool info_image --image vendor_boot-debug.img

Başlangıçta zincirleme bir AVB altbilgisi varsa repack_bootimg komutu çalıştırıldıktan sonra bir AVB altbilgisi eklenmesi gerekir. vendor_boot-debug.img öğesini imzalamak için herhangi bir test anahtarı kullanılabilir. Bunun nedeni, hata ayıklama ramdisk'inin yalnızca cihazın kilidi açıkken kullanılabilmesidir. Bu da boot veya vendor_boot bölümünde yayınlanmayan anahtarla imzalanmış görüntülerin kullanılmasına olanak tanır.

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