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ğruskip_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:
otatools.zip
dosyasını https://ci.android.com adresinden indirin.aosp_cf_arm64_only_phone-userdebug
'ünaosp-android-latest-release
dalındaki derleme yapıtlarından 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)
adresinden bir arm64 GSI kullanıyorsanız https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest adresinden indirin.Cihazı
boot-debug.img
veyavendor_boot-debug.img
ileuserdebug_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
AVB altbilgisi ekleme
--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