Blok tabanlı OTA'lar

Android 5.0 çalıştıran yeni cihazlarda blok tabanlı kablosuz (OTA) güncellemeleri etkinleştirebilirsiniz. OTA, OEM'lerin bir cihazın sistem bölümünü uzaktan güncellediği mekanizmadır:

  • Android 5.0 ve sonraki sürümler, her cihazın tam olarak aynı bölümü kullanmasını sağlamak için OTA güncellemelerini engeller. Blok OTA, tek tek dosyaları karşılaştırmak ve ikili yamalar hesaplamak yerine, bölümün tamamını tek bir dosya olarak işler ve tek bir ikili yama hesaplar. Böylece, ortaya çıkan bölümün tam olarak istenen bitleri içerdiğinden emin olunur. Bu sayede cihaz sistem resmi, hızlı önyükleme veya OTA üzerinden aynı duruma ulaşabilir.
  • Android 4.4 ve önceki sürümlerde, cihazların benzer dosya içerikleri, izinleri ve modları olmasını sağlayan ancak zaman damgaları ve temel depolama alanının düzeni gibi meta verilerin güncelleme yöntemine göre cihazlar arasında değişmesine izin veren dosya OTA güncellemeleri kullanılıyordu.

OTA'yı engelleme özelliği, her cihazın aynı bölümü kullanmasını sağladığından sistem bölümünü kriptografik olarak imzalamak için dm-verity'nin kullanılmasını sağlar. dm-verity hakkında ayrıntılı bilgi için Doğrulanmış Başlatma başlıklı makaleyi inceleyin.

Not: dm-verity'yi kullanmadan önce çalışan bir OTA sistemi blokunuz olmalıdır.

Öneriler

Android 5.0 veya sonraki sürümlerle kullanıma sunulan cihazlarda, fabrika ROM'unda OTA güncellemelerini engelleyin. Sonraki güncellemeler için blok tabanlı bir OTA oluşturmak isterseniz --block seçeneğini ota_from_target_files'e iletin.

Android 4.4 veya önceki sürümlerle kullanıma sunulan cihazlarda dosya OTA güncellemelerini kullanın. Android 5.0 veya sonraki sürümlerin tam blok OTA'sını göndererek cihazları geçirme

dm-verity, yalnızca Android 5.0 veya sonraki sürümlerin yüklü olduğu yeni cihazlarda bulunan önyükleme desteği gerektirdiğinden, mevcut cihazlarda dm-verity'yi etkinleştiremezsiniz.

Android OTA sistemi (kurtarma görüntüsü ve OTA'ları oluşturan komut dosyaları) üzerinde çalışan geliştiriciler, android-ota@googlegroups.com posta listesine abone olarak değişiklikleri takip edebilir.

OTA'ları gönderme ve engelleme

Dosya tabanlı OTA sırasında Android, dosya sistemi katmanında (dosya bazında) sistem bölümünün içeriğini değiştirmeye çalışır. Güncellemenin, dosyaları tutarlı bir sırada yazması, tutarlı bir son değiştirilme zamanı veya süper blok içermesi ya da blokları blok cihazda aynı konuma yerleştirmesi garanti edilmez. Bu nedenle, dosya tabanlı OTA'lar, dm-verity özellikli bir cihazda başarısız olur. OTA denemesinden sonra cihaz açılmaz.

Android, blok tabanlı OTA sırasında cihaza iki blok resmi arasındaki farkı (iki dosya grubu yerine) sunar. Güncelleme, bir cihaz derlemesini aşağıdaki yöntemlerden birini kullanarak blok düzeyinde (dosya sisteminin altında) ilgili derleme sunucusuyla karşılaştırır:

  • Güncellemenin tamamı. Sistem görüntüsünün tamamını kopyalamak kolaydır ve düzeltme oluşturmayı kolaylaştırır ancak düzeltme uygulamayı pahalı hale getirebilecek büyük resimler de oluşturur.
  • Artımlı güncelleme. İkili fark aracı kullanmak daha küçük resimler oluşturur ve düzeltme uygulamasını kolaylaştırır ancak düzeltmenin kendisini oluştururken bellek yoğundur.

Not: adb fastboot, tam OTA ile aynı bitleri cihaza yerleştirir. Bu nedenle, yanıp sönme işlemi, OTA'yı engelleme ile uyumludur.

Değiştirilmemiş sistemleri güncelleme

Android 5.0 çalıştıran değiştirilmemiş sistem bölümlerine sahip cihazlarda, blok OTA'nın indirme ve yükleme işlemi, dosya OTA'sıyla aynıdır. Ancak OTA güncellemesi kendisi aşağıdaki farklılıklardan birini veya daha fazlasını içerebilir:

  • İndirme boyutu.

    Tam blok OTA güncellemeleri, yaklaşık olarak tam dosya OTA güncellemeleriyle aynı boyuta sahiptir ve artımlı güncellemeler birkaç megabayt daha büyük olabilir.

    OTA boyutlarının karşılaştırması

    Şekil 1. Android 5.0 ve Android 5.1 sürümleri arasındaki Nexus 6 OTA boyutlarını karşılaştırma (değişen hedef derleme değişiklikleri)

    Genel olarak, artımlı blok OTA güncellemeleri aşağıdaki nedenlerle artımlı dosya OTA güncellemelerinden daha büyüktür:

    • Verilerin korunması. Blok tabanlı OTA'lar, dosya tabanlı OTA'lara kıyasla daha fazla veri (dosya meta verileri, dm-verity verileri, ext4 düzeni vb.) korur.
    • Hesaplama algoritması farklılıkları. Bir dosya OTA güncellemesinde, dosya yolu her iki derlemede de aynıysa OTA paketi söz konusu dosyayla ilgili veri içermez. Bir OTA güncellemesinde, bir dosyada çok az değişiklik olup olmadığını veya hiç değişiklik olmadığını belirlemek, hem kaynak hem de hedef sistemdeki yamalı hesaplama algoritmasının kalitesine ve dosya verilerinin düzenine bağlıdır.
  • Hatalı flaş ve RAM'e karşı hassasiyet. Bir dosya bozuksa bozuk dosyaya dokunmadığı sürece dosya OTA işlemi başarılı olur ancak sistem bölümünde bozulma algılanırsa blok OTA işlemi başarısız olur.

Değiştirilen sistemleri güncelleme

Android 5.0 yüklü, değiştirilmiş sistem bölümlerine sahip cihazlar için:

  • Artımlı blok OTA güncellemeleri başarısız oluyor. Sistem bölümü, adb remount sırasında veya kötü amaçlı yazılımlar sonucunda değiştirilebilir. Dosya OTA, bölümde kaynak veya hedef derlemenin parçası olmayan dosyaların eklenmesi gibi bazı değişikliklere izin verir. Ancak OTA'yı engelleme, bölüme ekleme yapılmasına izin vermez. Bu nedenle, kullanıcıların gelecekteki OTA'ları etkinleştirmek için sistem bölümünün tüm değişikliklerini geçersiz kılan tam bir OTA yüklemesi veya yeni bir sistem resmi yüklemesi gerekir.
  • Değiştirilen dosyaları değiştirme girişimleri güncelleme işleminin başarısız olmasına neden olur. Hem dosya hem de blok OTA güncellemelerinde, OTA değiştirilmiş bir dosyayı değiştirmeye çalışırsa OTA güncellemesi başarısız olur.
  • Değiştirilen dosyalara erişme denemeleri hata oluşturuyor (yalnızca dm-verity). Hem dosya hem de blok OTA güncellemeleri için dm-verity etkinse ve OTA, sistem dosya sisteminin değiştirilmiş bölümlerine erişmeye çalışırsa OTA bir hata oluşturur.