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:
https://ci.android.com adresinden
otatools.zip
indirin.aosp-main
üzerindekiaosp_arm64-userdebug
derleme yapılarından indirmenizi öneririz.repack_bootimg
için yürütme ortamını kurun:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
Kullandığınız GSI yapısından
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/subtained/ 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
: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
AVB altbilgisi ekleyin
--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