Yeni bir cihazda sanal A/B testi uygulamak veya kullanıma sunulmuş bir cihazda sonradan uyumlulaştırma yapmak için cihaza özgü kodda değişiklik yapmanız gerekir.
İşaret oluşturma
Sanal A/B kullanan cihazlar A/B cihazı olarak yapılandırılmış ve dinamik bölümlerle başlatılmış olmalıdır.
Sanal A/B ile başlatılan cihazları, sanal A/B cihaz temel yapılandırmasını devralacak şekilde ayarlayın:
$(call inherit-product, \
$(SRC_TARGET_DIR)/product/virtual_ab_ota.mk)
Sanal A/B ile kullanıma sunulan cihazlarda B yuvaları artık süper olmadığından BOARD_SUPER_PARTITION_SIZE
için yalnızca yarı yarıya daha fazla tahta boyutuna ihtiyaç vardır. Yani BOARD_SUPER_PARTITION_SIZE
, toplam(güncelleme gruplarının boyutu) + genel gider değerinden büyük veya bu değere eşit olmalıdır. Bu değer de toplam(bölümlerin boyutu) + genel gider değerinden büyük veya bu değere eşit olmalıdır.
Android 13 ve sonraki sürümlerde, Sanal A/B ile sıkıştırılmış anlık görüntüleri etkinleştirmek için aşağıdaki temel yapılandırmayı devralın:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
$(call inherit-product, \
$(SRC_TARGET_DIR)/product/virtual_ab_ota/vabc_features.mk)
Bu sayede, işlemsiz sıkıştırma yöntemi kullanılırken sanal A/B ile kullanıcı alanı anlık görüntüleri oluşturulabilir. Daha sonra,desteklenen yöntemlerden biri olan zstd
ve lz4
için sıkıştırma yöntemini yapılandırabilirsiniz. Android 15'te sıkıştırma, cihaz ihtiyaçlarına uyacak şekilde daha da özelleştirilebilir. Daha fazla bilgi için Sıkıştırmayı hassaslaştırma başlıklı makaleyi inceleyin.
PRODUCT_VIRTUAL_AB_COMPRESSION_METHOD := lz4
PRODUCT_VIRTUAL_AB_COMPRESSION_FACTOR := 65536
Android 12 için sanal A/B ile sıkıştırılmış anlık görüntüleri etkinleştirmek üzere aşağıdaki temel yapılandırmayı devralın:
$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_ramdisk.mk)
$(call inherit-product, \
$(SRC_TARGET_DIR)/product/virtual_ab_ota/compression.mk)
XOR sıkıştırma
Android 13 ve sonraki sürümlere yükseltilen cihazlarda XOR sıkıştırma özelliği varsayılan olarak etkin değildir. XOR sıkıştırmayı etkinleştirmek için cihazın .mk
dosyasına aşağıdakileri ekleyin.
PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.compression.xor.enabled=true
XOR sıkıştırması, android_t_baseline.mk
'ten devralan cihazlarda varsayılan olarak etkindir.
Kullanıcı alanı birleştirme
Sanal A/B'nin modern sürümünde (Android T ve sonraki sürümler), anlık görüntü birleştirme işlemi tamamen kullanıcı alanında gerçekleşir. Bu değişiklik,Snapuserd ve dm-user ile yapılmıştır. Android 13 ve sonraki sürümlerle kullanıma sunulan cihazlarda kullanıcı alanı birleştirme varsayılan olarak etkindir. Eski cihazlarda yükseltme işlemi için bu özellik aşağıdakilerle ayarlanabilir:
PRODUCT_VENDOR_PROPERTIES += ro.virtual_ab.userspace.snapshots.enabled=true
Başlatma kontrolü HAL'si
Başlatma denetimi HAL, OTA istemcilerinin başlatma slotlarını kontrol etmesi için bir arayüz sağlar. Sanal A/B, önyükleme kontrol HAL'inde küçük bir sürüm yükseltmesi gerektirir. Bunun nedeni, önyükleme yükleyicinin yanıp sönme veya fabrika ayarlarına sıfırlama sırasında korunmasını sağlamak için ek API'lere ihtiyaç duyulmasıdır. HAL tanımının en son sürümü için IBootControl.hal ve types.hal dosyalarına bakın.
// hardware/interfaces/boot/1.1/types.hal
enum MergeStatus : uint8_t {
NONE, UNKNOWN, SNAPSHOTTED, MERGING, CANCELLED };
// hardware/interfaces/boot/1.1/IBootControl.hal
package android.hardware.boot@1.1;
interface IBootControl extends @1.0::IBootControl {
setSnapshotMergeStatus(MergeStatus status)
generates (bool success);
getSnapshotMergeStatus()
generates (MergeStatus status);
}
// Recommended implementation
Return<bool> BootControl::setSnapshotMergeStatus(MergeStatus v) {
// Write value to persistent storage
// e.g. misc partition (using libbootloader_message)
// bootloader rejects wipe when status is SNAPSHOTTED
// or MERGING
}
Fstab değişiklikleri
Meta veri bölümünün bütünlüğü, özellikle OTA güncellemesi uygulandıktan hemen sonra, önyükleme işlemi için çok önemlidir. Bu nedenle, first_stage_init
'ün bağlamadan önce meta veri bölümünün kontrol edilmesi gerekir. Bunun gerçekleşmesini sağlamak için /metadata
girişine check
fs_mgr işaretini ekleyin. Aşağıda bir örnek verilmiştir:
/dev/block/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard,sync wait,formattable,first_stage_mount,check
Çekirdek gereksinimleri
Anlık görüntü almayı etkinleştirmek için CONFIG_DM_SNAPSHOT
değerini true
olarak ayarlayın.
F2FS kullanan cihazlarda, dosya sabitlemeyi düzeltmek için f2fs: Export FS_NOCOW_FL flag to user çekirdek yamasını ekleyin. f2fs: support aligned pinned file çekirdek yamasını da ekleyin.
Sanal A/B, çekirdek sürüm 4.3'e eklenen özelliklere (snapshot
ve snapshot-merge
hedeflerindeki taşma durum biti) dayanır. Android 9 ve sonraki sürümleri çalıştıran tüm cihazlarda 4.4 veya sonraki bir çekirdek sürümü yüklü olmalıdır.
Sıkıştırılmış anlık görüntüleri etkinleştirmek için desteklenen minimum çekirdek sürümü 4.19'dur.
CONFIG_DM_USER=m
veya CONFIG_DM_USER=y
olarak ayarlayın. İlki (modül) kullanılıyorsa modül, birinci aşama ramdisk'ine yüklenmelidir. Bu işlem, cihazın Makefile'a aşağıdaki satırı ekleyerek gerçekleştirilebilir:
BOARD_GENERIC_RAMDISK_KERNEL_MODULES_LOAD := dm-user.ko
Fastboot araç değişiklikleri
Android 11, fastboot protokolünde aşağıdaki değişiklikleri yapar:
getvar snapshot-update-status
: Önyükleme denetimi HAL'inin önyükleyiciye ilettiği değeri döndürür:- Durum
MERGING
ise bootloadermerging
değerini döndürmelidir. - Durum
SNAPSHOTTED
ise bootloadersnapshotted
değerini döndürmelidir. - Aksi takdirde, önyükleyici
none
döndürmelidir.
- Durum
snapshot-update merge
— Birleştirme işlemini tamamlar ve gerekirse kurtarma/hızlı başlatma başlatma. Bu komut yalnızcasnapshot-update-status
merging
ise geçerlidir ve yalnızca fastbootd'de desteklenir.snapshot-update cancel
: Başlatma kontrolü HAL'inin birleştirme durumunuCANCELLED
olarak belirler. Cihaz kilitliyken bu komut geçersizdir.erase
veyawipe
:metadata
,userdata
ya da başlatma kontrolü HAL'si için birleştirme durumunu barındıran bir bölüm (erase
veyawipe
) anlık görüntü birleştirme durumunu kontrol etmelidir. DurumMERGING
veyaSNAPSHOTTED
ise cihaz işlemi iptal etmelidir.set_active
: Etkin alanı değiştiren birset_active
komutu, anlık görüntü birleştirme durumunu kontrol etmelidir. DurumMERGING
ise cihaz işlemi iptal etmelidir. Yuva,SNAPSHOTTED
durumundayken güvenli bir şekilde değiştirilebilir.
Bu değişiklikler, cihazların yanlışlıkla başlatılamaz hale gelmesini önlemek için tasarlanmıştır ancak otomatik araçları olumsuz etkileyebilir. Komutlar, tüm bölümlerin yanıp sönmesinin bir parçası olarak kullanıldığında (ör. fastboot flashall
çalıştırma) aşağıdaki akışı kullanmanız önerilir:
getvar snapshot-update-status
. sorgu.merging
veyasnapshotted
isesnapshot-update cancel
sorununu gönderin.- Yanıp sönme adımlarına geçin.
Depolama alanı gereksinimlerini azaltın
Süper'de tam A/B depolama alanı ayrılmamış ve gerektiğinde /data
kullanması beklenen cihazların blok eşleme aracını kullanması önemle tavsiye edilir. Blok eşleme aracı, blok tahsisini derlemeler arasında tutarlı tutar ve anlık görüntüye gereksiz yazma işlemlerini azaltır. Bu konu OTA Boyutunu Azaltma bölümünde açıklanmıştır.
OTA sıkıştırma algoritmaları
OTA paketleri farklı performans metrikleri için ayarlanabilir. Android, yükleme süresi, COW alan kullanımı, önyükleme süresi ve anlık görüntü birleştirme süresi arasında değişen avantajlara sahip birkaç desteklenen sıkıştırma yöntemi (lz4
, zstd
ve none
) sunar. Sıkıştırma içeren sanal ab için etkinleştirilen varsayılan seçenek lz4
compression method
'tür.
Sıkıştırmayı hassas ayarlama
Sıkıştırma algoritmaları, iki yöntemle daha da özelleştirilebilir:
(sıkıştırma düzeyi) (hız pahasına elde edilen sıkıştırma miktarı) ve (sıkıştırma faktörü) (maksimum sıkıştırılabilir pencere boyutu).
Sıkıştırma seviyesi, zstd
gibi belirli algoritmalar tarafından kullanılabilir. Seviyenin değiştirilmesi, hız ile sıkıştırma oranı arasında bir denge kurulmasına neden olur.
Sıkıştırma faktörü, OTA yükleme sırasında kullanılan maksimum sıkıştırma aralığı boyutunu tanımlar. Varsayılan olarak 64k olarak ayarlanır ancak PRODUCT_VIRTUAL_AB_COMPRESSION_FACTOR
derleme parametresi özelleştirilerek geçersiz kılınabilir. Desteklenen sıkıştırma faktörleri 4k, 8k, 16k, 32k, 64k, 128k ve 256k'tır.
PRODUCT_VIRTUAL_AB_COMPRESSION_FACTOR := 65536
Pixel 8 Pro'da artımlı OTA
Yükleme sonrası aşaması olmadan yükleme süresi | COW Alan Kullanımı | Yayın OTA başlatma süresi | Anlık görüntü birleştirme süresi | |
---|---|---|---|---|
lz4 | 18 dk. 15 sn. | 2,5 GB | 32,7 sn. | 98,6 sn. |
zstd | 24 dk. 49 sn. | 2,05 GB | 36,3 sn | 133,2 sn. |
yok | 16 dk. 42 sn. | 4,76 GB | 28,7 sn. | 76,6 sn |
Pixel 8 Pro'da tam OTA
Yükleme sonrası aşaması olmadan yükleme süresi | COW Alan Kullanımı | Yayın OTA başlatma süresi | Anlık görüntü birleştirme süresi | |
---|---|---|---|---|
lz4 | 15 dk. 11 sn. | 4,16 GB | 17,6 sn. | 82,2 sn. |
zstd | 16 dk. 19 sn. | 3,46 GB | 21,0 sn | 106,3 sn. |
yok | 13 dk. 33 sn. | 6,39 GB | 18,5 sn. | 92,5 sn. |