基於塊的 OTA

您可以為運行 Android 5.0 的新設備啟用基於塊的無線 (OTA) 更新。 OTA 是 OEM 遠程更新設備系統分區的機制:

  • Android 5.0及更高版本使用塊 OTA 更新來確保每台設備使用完全相同的分區。塊 OTA 不是比較單個文件和計算二進制補丁,而是將整個分區作為一個文件處理併計算單個二進制補丁,以確保生成的分區完全包含預期的位。這允許設備系統映像通過 fastboot 或 OTA 達到相同的狀態。
  • Android 4.4及更早版本使用文件 OTA 更新,確保設備包含相似的文件內容、權限和模式,但允許時間戳等元數據和底層存儲佈局根據更新方法在設備之間有所不同。

由於塊 OTA 可確保每個設備使用相同的分區,因此可以使用 dm-verity 對系統分區進行加密簽名。有關 dm-verity 的詳細信息,請參閱驗證啟動

注意:在使用 dm-verity 之前,您必須有一個工作塊 OTA 系統。

建議

對於搭載 Android 5.0 或更高版本的設備,請在出廠 ROM 中使用阻止 OTA 更新。要為後續更新生成基於塊的 OTA,請將--block選項傳遞給ota_from_target_files

對於搭載 Android 4.4 或更早版本的設備,請使用文件 OTA 更新。雖然可以通過發送 Android 5.0 或更高版本的完整塊 OTA 來轉換設備,但它需要發送比增量 OTA 大得多的完整 OTA(因此不鼓勵)。

由於 dm-verity 需要僅在搭載 Android 5.0 或更高版本的新設備中才支持引導加載程序,因此您無法為現有設備啟用 dm-verity。

開發 Android OTA 系統(恢復映像和生成 OTA 的腳本)的開發人員可以通過訂閱android-ota@googlegroups.com郵件列表來跟上變化。

文件與塊 OTA

在基於文件的 OTA 期間,Android 會嘗試在文件系統層更改系統分區的內容(逐個文件)。更新不保證以一致的順序寫入文件,具有一致的最後修改時間或超級塊,甚至不保證將塊放在塊設備上的相同位置。因此,基於文件的 OTA 在啟用 dm-verity 的設備上會失敗; OTA 嘗試後,設備無法啟動。

在基於塊的 OTA 期間,Android 為設備提供兩個塊圖像(而不是兩組文件)之間的差異。該更新使用以下方法之一在塊級別(文件系統下方)根據相應的構建服務器檢查設備構建:

  • 全面更新。複製完整的系統映像很簡單,可以輕鬆生成補丁,但也會生成大映像,這會使應用補丁變得昂貴。
  • 增量更新。使用二進制差異工具會生成較小的圖像並簡化補丁應用程序,但在生成補丁本身時會佔用大量內存。

注意: adb fastboot在設備上放置與完整 OTA 完全相同的位,因此刷寫與塊 OTA 兼容。

更新未修改的系統

對於運行 Android 5.0 且系統分區未修改的設備,塊 OTA 的下載和安裝過程與文件 OTA 的下載和安裝過程相同。但是,OTA 更新本身可能包含以下一項或多項差異:

  • 下載大小。完整塊 OTA 更新的大小與完整文件 OTA 更新的大小大致相同,增量更新可能只有幾兆字節。

    OTA大小比較

    圖 1.比較 Android 5.0 和 Android 5.1 版本之間的 Nexus 6 OTA 大小(不同的目標構建更改)

    通常,增量塊 OTA 更新大於增量文件 OTA 更新,原因如下:

    • 數據保存。基於塊的 OTA 比基於文件的 OTA 保留更多的數據(文件元數據、dm-verity 數據、ext4 佈局等)。
    • 計算算法差異。在文件 OTA 更新中,如果兩個版本中的文件路徑相同,則 OTA 包不包含該文件的數據。在塊 OTA 更新中,確定文件中很少或沒有更改取決於補丁計算算法的質量以及源系統和目標系統中文件數據的佈局。
  • 對故障閃存和 RAM 的敏感性。如果文件損壞,只要不接觸損壞的文件,文件 OTA 就會成功,但如果檢測到系統分區上的任何損壞,塊 OTA 就會失敗。

更新修改後的系統

對於運行 Android 5.0 且系統分區已修改的設備:

  • 增量塊 OTA 更新失敗。系統分區可能在adb remount期間或由於惡意軟件而被修改。文件 OTA 允許對分區進行一些更改,例如添加不屬於源或目標構建的文件。但是,塊 OTA 不允許對分區進行添加,因此用戶需要安裝完整的 OTA 以覆蓋任何系統分區修改)或刷新新的系統映像以啟用未來的 OTA。
  • 嘗試更改已修改的文件會導致更新失敗。對於文件和塊 OTA 更新,如果 OTA 嘗試更改已修改的文件,則 OTA 更新將失敗。
  • 嘗試訪問修改後的文件會產生錯誤(僅限 dm-verity) 。對於文件和塊 OTA 更新,如果啟用 dm-verity 並且 OTA 嘗試訪問系統文件系統的修改部分,則 OTA 會生成錯誤。