Hata ayıklama ramdisk ile VTS testi

Android 10'dan bu yana, CTS-on-GSI/VTS uyumluluk testini çalıştırmak için kullanılan Genel Sistem Görüntüsü (GSI), sürüm imzalı olması için kullanıcı hata ayıklamasından kullanıcı oluşturma türüne değiştirildi. Bu, VTS testi için bir sorundur çünkü VTS'nin çalışması için adb root gerekir, ancak adb root kullanıcı oluşturma cihazında mevcut değildir.

Hata ayıklama ramdisk'i (veya hata ayıklama önyükleme görüntüsü), önyükleyicinin kilidi açılmış bir kullanıcı oluşturma cihazında adb root etkinleştirmek için tanıtıldı. Bu, CTS-on-GSI ve VTS-on-GSI için aynı kullanıcı yapısı GSI system.img kullanarak test akışını basitleştirir. STS kurulumu için başka bir userdebug OEM system.img kullanılması hala gereklidir.

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

Test odası Şununla test edin: İnşa etmek Ramdisk'te hata ayıklama adb kökü? Android 9 -> 10 yapı varyantı değişikliği
CTS OEM'in sistemi kullanıcı N N Değişiklik yok
GSI'da CTS GSI kullanıcı N N

userdebug -> kullanıcı GSI

yayın imzalandı

KH OEM'in sistemi kullanıcı hata ayıklaması N e Q'da yeni
VTS GSI kullanıcı e e

userdebug -> kullanıcı GSI

yayın imzalandı

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 aygıtı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ı build system.img (GSI'ler veya OEM'ler) ile adb root izin verir.

vendor_boot bölümü olan cihazları kullanan Genel Çekirdek Görüntüsü (GKI) için, boot bölümünün sertifikalı bir GKI görüntüsüyle flashlanması gerektiğinden boot-debug.img flashlanmamalıdır. Bunun yerine ramdisk hata ayıklamasını kolaylaştırmak için vendor_boot-debug.img dosyasının vendor_boot bölümüne flash edilmesi gerekir.

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

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

Hata ayıklama ramdiski, aşağıdaki özelliklere sahip cihazların yükseltilmesi için oluşturulmayacak veya kullanılmayacaktır:

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

Android 12 GSI

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

29.09.2021 tarihinden itibaren, ramdisklerdeki hata ayıklamanın artık repack_bootimg aracıyla güncellenmesi gerekmiyor. SGR1.210929.001 (7777720) sonraki Android 12 GSI derlemesi, güncel userdebug_plat_sepolicy.cil dosyasını system.img dosyasına dahil eder ve userdebug_plat_sepolicy.cil ayıklama ramdiskinden yok sayar. Ayrıntılar için CL'lere bakın.

Android 11 GSI

boot-debug.img veya vendor_boot-debug.img kullanıldığında, sistem politikası boot-debug.img veya vendor_boot-debug.img dosyasının hata ayıklama ramdiskindeki userdebug_plat_sepolicy.cil dosyasından yüklenir. GSI görüntülerini başlatmak için lütfen daima android11-gsi şubesinden güncel sepolicy değişikliklerini dahil ederek boot-debug.img veya vendor_boot-debug.img dosyanızı yeniden oluşturun.

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

Hata ayıklama ramdiskini yeniden paketleme

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

Adımlar aşağıdaki gibidir:

  1. https://ci.android.com adresinden otatools.zip indirin. aosp-main üzerindeki aosp_arm64-userdebug derleme yapılarından indirmenizi öneririz.

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

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. Kullandığınız GSI yapısından 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/subtained/ 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 :

    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 argümanları cihaz konfigürasyonlarına göre ayarlanabilir. Ayrıntılı açıklama için bir sonraki bölüme bakın.

Kullanıcı hata ayıklama politikasının yolu

Yukarıdaki repack_bootimg userdebug_plat_sepolicy.cil dosyasını --src_bootimg ramdiskinden --dst_bootimg ramdiskine kopyalar. Ancak hata ayıklama ramdiski içindeki yol farklı Android sürümlerinde farklı olabilir. Android 10 ve 11'de, çekirdek komut satırında androidboot.force_normal_boot=1 olan cihazlar için yol first_stage_ramdisk/userdebug_plat_sepolicy.cil . 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 başlayarak, hata ayıklama ramdiski içindeki yol, çekirdek komut satırında androidboot.force_normal_boot=1 varlığına bakılmaksızın her zaman userdebug_plat_sepolicy.cil şeklindedir. Aşağıdaki tabloda farklı Android sürümlerinde hata ayıklama ramdiski içindeki yollar gösterilmektedir.

Resimde hata ayıklama Android 10 Android 11 Android 12
Hata ayıklama-ramdisk-${KERNEL_VERSION}.img ile GKI önyüklemesi 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 satıcı_boot-debug.img Yok Force_normal_boot'a bağlıdır userdebug_plat_sepolicy.cil

Dosyaları src_path:dst_path çiftlerinden oluşan bir listeyle farklı yollardan ve farklı yollara kopyalamak için --ramdisk_add belirtebilirsiniz. Örneğin, aşağıdaki komut, first_stage_ramdisk/userdebug_plat_sepolicy.cil dosyasını Android 11 boot-with-debug-ramdisk-5.4.img dosyasından Android 11 vendor_boot-debug.img içindeki first_stage_ramdisk/userdebug_plat_sepolicy.cil 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 iletilen görüntü AVB zincirleme bölüm olarak yapılandırılmışsa, repack_bootimg komutunu çalıştırdıktan sonra bir AVB altbilgisinin eklenmesi gerekir.

Örneğin, repack_bootimg çalıştırmadan önce , vendor_boot-debug.img zincirleme bir 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 zincirlenmiş bir AVB altbilgisi varsa, repack_bootimg komutunu çalıştırdıktan sonra bir AVB altbilgisinin eklenmesi gerekir. vendor_boot-debug.img dosyasını imzalamak için herhangi bir test anahtarının kullanılması işe yarar çünkü hata ayıklama ramdiski yalnızca bir aygıtın kilidi açıldığında kullanılabilir; bu, 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