Yeni bir cihazda sanal A/B'yi uygulamak veya kullanıma sunulmuş bir cihazda sonradan düzenleme 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 kullanıma sunulan 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 maliyet değerinden büyük veya bu değere eşit olmalıdır. Bu değer de toplam(bölümlerin boyutu) + genel maliyet 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. Ardından,sıkıştırma yöntemini desteklenen yöntemlerden zstd
ve lz4
'ten birine 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 tarafından sağlanı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
Boot control HAL
Önyükleme kontrolü HAL, OTA istemcilerinin önyükleme yuvaları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
meta veri bölümünü bağlamadan önce kontrol edilmelidir. 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. Bunu, cihaz Makefile'ine aşağıdaki satırı ekleyerek yapabilirsiniz:
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ükleme yükleyiciye ilettiği değeri döndürür:- Durum
MERGING
ise önyükleyicimerging
döndürmelidir. - Durum
SNAPSHOTTED
ise önyükleyicisnapshotted
döndürmelidir. - Aksi takdirde, önyükleyici
none
döndürmelidir.
- Durum
snapshot-update merge
: Bir birleştirme işlemini tamamlar ve gerekirse recovery/fastbootd'ye önyükleme yapar. Bu komut yalnızcasnapshot-update-status
merging
ise geçerlidir ve yalnızca fastbootd'de desteklenir.snapshot-update cancel
: Açılış kontrolü HAL'inin birleştirme durumunuCANCELLED
olarak belirler. Cihaz kilitliyken bu komut geçersizdir.erase
veyawipe
:metadata
,userdata
veya önyükleme kontrolü HAL'i için birleştirme durumunu tutan bir bölümdekierase
veyawipe
, anlık görüntü birleştirme durumunu kontrol etmelidir. DurumMERGING
veyaSNAPSHOTTED
ise cihaz işlemi iptal etmelidir.set_active
: Etkin yuvayı 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
sorgusu.merging
veyasnapshotted
isesnapshot-update cancel
sorununu gönderin.- Yanıp sönme adımlarına geçin.
Depolama alanı gereksinimlerini azaltma
Süper'de tam A/B depolama alanı tahsis edilmeyen ve gerektiğinde /data
kullanmayı bekleyen 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 çeşitli desteklenen sıkıştırma yöntemleri (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 seviyesi) (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 düzeyi, zstd
gibi belirli algoritmalar tarafından kullanılabilir ve düzeyin değiştirilmesi, hız ile sıkıştırma oranı arasında bir denge gerektirir.
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ı | OTA sonrası önyükleme 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ı | OTA sonrası önyükleme 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. |