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:
otatools.zip
'ü https://ci.android.com adresinden indirin.aosp-main
'teaosp_arm64-userdebug
derleme yapılarını indirmenizi öneririz.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
Kullandığınız GSI derlemesinden
userdebug_plat_sepolicy.cil
veyaboot-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.boot-debug.img
veyavendor_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
AVB altbilgisi ekleme
--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