Blockbasierte OTAs

Sie können blockbasierte OTA-Updates (Over-the-Air) für neue Geräte mit Android 5.0 aktivieren. OTA ist der Mechanismus, mit dem OEMs die Systempartition eines Geräts aus der Ferne aktualisieren:

  • Android 5.0 und spätere Versionen verwenden Block-OTA-Updates, um sicherzustellen, dass jedes Gerät genau dieselbe Partition verwendet. Anstatt einzelne Dateien zu vergleichen und binäre Patches zu berechnen, behandelt Block-OTA die gesamte Partition als eine Datei und berechnet einen einzelnen binären Patch, um sicherzustellen, dass die resultierende Partition genau die vorgesehenen Bits enthält. Dadurch kann das Gerätesystem-Image über Fastboot oder OTA denselben Status erreichen.
  • Android 4.4 und frühere Versionen verwendeten Datei-OTA-Updates, die sicherstellten, dass Geräte ähnliche Dateiinhalte, Berechtigungen und Modi enthielten, aber Metadaten wie Zeitstempel und das Layout des zugrunde liegenden Speichers je nach Aktualisierungsmethode zwischen den Geräten variieren konnten.

Da Block-OTA sicherstellt, dass jedes Gerät dieselbe Partition verwendet, ermöglicht es die Verwendung von dm-verity zum kryptografischen Signieren der Systempartition. Einzelheiten zu dm-verity finden Sie unter Verified Boot .

Hinweis: Sie müssen über ein funktionierendes Block-OTA-System verfügen, bevor Sie dm-verity verwenden können.

Empfehlungen

Verwenden Sie für Geräte, die mit Android 5.0 oder höher gestartet werden, die Option „OTA-Updates blockieren“ im Werks-ROM. Um einen blockbasierten OTA für nachfolgende Updates zu generieren, übergeben Sie die Option --block an ota_from_target_files .

Für Geräte, die mit Android 4.4 oder früher gestartet wurden, verwenden Sie Datei-OTA-Updates. Während es möglich ist, Geräte durch das Senden eines vollständigen Block-OTA von Android 5.0 oder höher zu übertragen, erfordert dies das Senden eines vollständigen OTA, der deutlich größer ist als ein inkrementeller OTA (und wird daher nicht empfohlen).

Da dm-verity Bootloader-Unterstützung erfordert, die nur auf neuen Geräten mit Android 5.0 oder höher verfügbar ist, können Sie dm-verity nicht für vorhandene Geräte aktivieren.

Entwickler, die am Android-OTA-System (dem Wiederherstellungsimage und den Skripten, die OTAs generieren) arbeiten, können über Änderungen auf dem Laufenden bleiben, indem sie die Mailingliste android-ota@googlegroups.com abonnieren.

Datei- oder Block-OTAs

Bei einem dateibasierten OTA versucht Android, den Inhalt der Systempartition auf Dateisystemebene (Datei für Datei) zu ändern. Es kann nicht garantiert werden, dass das Update die Dateien in einer konsistenten Reihenfolge schreibt, einen konsistenten Zeitpunkt der letzten Änderung oder einen konsistenten Superblock aufweist oder die Blöcke sogar an derselben Stelle auf dem Blockgerät platziert. Aus diesem Grund schlagen dateibasierte OTAs auf einem dm-verity-fähigen Gerät fehl; Nach dem OTA-Versuch bootet das Gerät nicht.

Bei einem blockbasierten OTA liefert Android dem Gerät die Differenz zwischen den beiden Blockbildern (statt zwei Dateisätzen). Das Update prüft einen Geräte-Build anhand des entsprechenden Build-Servers auf Blockebene (unterhalb des Dateisystems) mithilfe einer der folgenden Methoden:

  • Vollständiges Update . Das Kopieren des vollständigen Systemabbilds ist einfach und erleichtert die Patch-Generierung, erzeugt aber auch große Abbilder, die die Anwendung von Patches teuer machen können.
  • Inkrementelles Update . Die Verwendung eines Binär-Differenz-Tools generiert kleinere Bilder und vereinfacht die Patch-Anwendung, ist jedoch beim Generieren des Patches selbst speicherintensiv.

Hinweis: adb fastboot platziert genau die gleichen Bits auf dem Gerät wie ein vollständiger OTA, sodass das Flashen mit Block-OTA kompatibel ist.

Aktualisieren Sie unveränderte Systeme

Bei Geräten mit unveränderten Systempartitionen, auf denen Android 5.0 ausgeführt wird, bleibt der Download- und Installationsprozess für einen Block-OTA derselbe wie für einen Datei-OTA. Das OTA-Update selbst kann jedoch einen oder mehrere der folgenden Unterschiede enthalten:

  • Downloadgröße . Vollständige Block-OTA-Updates haben ungefähr die gleiche Größe wie vollständige Datei-OTA-Updates, und inkrementelle Updates können nur ein paar Megabyte größer sein.

    Vergleich der OTA-Größen

    Abbildung 1. Vergleichen Sie die OTA-Größen des Nexus 6 zwischen den Versionen Android 5.0 und Android 5.1 (unterschiedliche Ziel-Build-Änderungen).

    Im Allgemeinen sind inkrementelle Block-OTA-Updates aus folgenden Gründen größer als inkrementelle Datei-OTA-Updates:

    • Datenerhaltung . Blockbasierte OTAs bewahren mehr Daten (Dateimetadaten, DM-Verity-Daten, ext4-Layout usw.) als dateibasierte OTAs.
    • Unterschiede im Berechnungsalgorithmus . Wenn bei einem Datei-OTA-Update ein Dateipfad in beiden Builds identisch ist, enthält das OTA-Paket keine Daten für diese Datei. Bei einem Block-OTA-Update hängt die Bestimmung geringer oder keiner Änderung in einer Datei von der Qualität des Patch-Berechnungsalgorithmus und dem Layout der Dateidaten im Quell- und Zielsystem ab.
  • Empfindlichkeit gegenüber fehlerhaftem Flash und RAM . Wenn eine Datei beschädigt ist, ist ein Datei-OTA erfolgreich, solange er die beschädigte Datei nicht berührt. Ein Block-OTA schlägt jedoch fehl, wenn er eine Beschädigung auf der Systempartition erkennt.

Geänderte Systeme aktualisieren

Für Geräte mit geänderten Systempartitionen mit Android 5.0:

  • Inkrementelle Block-OTA-Updates schlagen fehl . Eine Systempartition kann während eines adb remount oder aufgrund von Malware geändert werden. File OTA toleriert einige Änderungen an der Partition, z. B. das Hinzufügen von Dateien, die nicht Teil des Quell- oder Ziel-Builds sind. Block-OTA toleriert jedoch keine Ergänzungen zur Partition, sodass Benutzer einen vollständigen OTA installieren müssen, der alle Änderungen an der Systempartition überschreibt, oder ein neues Systemabbild flashen müssen, um zukünftige OTAs zu aktivieren.
  • Versuche, geänderte Dateien zu ändern, führen zu Aktualisierungsfehlern . Sowohl bei Datei- als auch bei Block-OTA-Updates schlägt das OTA-Update fehl, wenn der OTA versucht, eine geänderte Datei zu ändern.
  • Versuche, auf geänderte Dateien zuzugreifen, führen zu Fehlern (nur dm-verity) . Wenn dm-verity aktiviert ist und der OTA versucht, auf geänderte Teile des Systemdateisystems zuzugreifen, generiert der OTA sowohl bei Datei- als auch bei Block-OTA-Updates einen Fehler.