android P OTA 初探 —— 1、OTA简单介绍
本系列介紹自己理解的基于android P的OTA系統。由于工作需要開始研究,實踐經驗匱乏,難免有理解不夠或者錯誤之處。還請多多指正,不吝賜教!
1、
本文提及的OTA指的是android手機的基礎操作系統、系統分區上安裝的只讀應用和/或時區規則的無線下載 (OTA) 更新。根據升級方式不同,分為:A/B(無縫)系統更新(android O新增)、 傳統的非 A/B 系統更新、 時區規則更新(Android 8.1 開始支持)。
其中,傳統的非 A/B 系統更新 又可以分為 基于文件的ota(android5.0之前) 和 基于塊的ota(block , android5.0開始支持,即升級android5.0以上的系統,可以用基于block的ota包)。
塊 OTA 不會比較各個文件,也不會分別計算各個二進制補丁程序,而是將整個分區處理為一個文件并計算單個二進制補丁程序,以確保生成的分區剛好包含預期的位數。這樣一來,設備系統映像就能夠通過 fastboot 或 OTA 達到相同的狀態。因為塊 OTA 可確保每個設備使用相同的分區,所以它能夠使用 dm-verity 以加密的方式為系統分區簽名。dm-verity是驗證啟動相關的,具體的可以查看官網介紹。
根據升級內容不同,又可以分為整包升級和差分升級。
文件和塊OTA的區別主要在差分包:系統分區的內容可能會在 adb remount 期間或由于惡意軟件而被修改。如果某分區已經被修改,執行基于塊的OTA升級就會失敗。而對于基于文件的OTA方式,只要當前設備的系統中此差分包要升級的文件沒有被修改,就不會有沖突。
相應的,塊升級前檢查到當前設備分區被修改,就升級失敗,系統以舊系統重啟運行。而文件OTA雖然能升級成功,但重啟運行后可能會有問題。
2、
A/B系統更新 與 非 A/B 系統更新 兩者是不兼容的。因為他們對應的系統分區和升級邏輯完全不同。3、
現在基本用的都是基于塊的OTA方式。 android P的代碼中關于OTA升級包的制作已經默認只有基于塊的OTA和AB系統OTA這兩種包的制作流程了。 不再支持基于文件的OTA包的制作。 但,基于AB系統的OTA還不流行,主要是因為它System、Vendor等分區都是兩份,占用存儲空間太多。4、
OTA流程:1)、設備會與 OTA 服務器進行定期確認,并被告知是否有更新可用,包括更新軟件包的 URL 和向用戶顯示的描述字符串。
2)、將更新下載到緩存或數據分區,并根據 /system/etc/security/otacerts.zip 中的證書驗證加密簽名。系統提示用戶安裝更新。
3)、設備重新啟動進入Recovery模式,引導恢復分區中的內核和系統啟動,而非引導分區中的內核。
恢復分區的二進制文件由 init 啟動。它會在 /cache/recovery/command 中尋找將其指向下載軟件包的命令行參數。
4)、恢復操作會根據 /res/keys (包含在恢復分區中的 RAM 磁盤的一部分)中的公鑰來驗證軟件包的加密簽名。
5)、從軟件包中提取數據,并根據需要使用該數據更新引導、系統和/或供應商分區。系統分區上其中一個新文件包含新恢復分區內容。
6)、設備正常重啟。加載最新更新的引導分區,在最新更新的系統分區中裝載并開始執行二進制文件。
7)、作為正常啟動的一部分,系統會根據所需內容(預先存儲為 /system 中的一個文件)檢查恢復分區的內容。如果二者內容不同,則恢復分區會被所需內容重新刷寫(在后續引導中,恢復分區已經包含新內容,因此無需重新刷寫)。
系統更新完成!
5、還有一點要補充
OTA過程中相關的幾種軟件包:
(1)、Target包。
這個包可以理解為系統內容資料收集包,它對應了某個版本的軟件。里面基本包含了系統的所有內容。是用來生成升級包的中間包。我們每次編譯android系統軟件,都可以同步生成Target包,特別是發布的軟件一定要備份對應的Target包,以便后面升級使用。
(2)、完整升級包。
這個是用來進行系統完整升級的包。任何版本的軟件都可以用這個包升級到指定的版本。比如,從android O升級到android P一般會通過完整升級包進行升級。它是通過腳本,從Target包生成的。
(3)、增量升級包。
這個是用來進行增量升級的包。里面一般只包含了一些新版本對比老版本變化了的內容。理所當然的,這種升級包要求只能從指定的版本(版本1)升級到當前新版本(版本2)。它是在版本1 和版本2 對應的Target包基礎上生成的。
總結
以上是生活随笔為你收集整理的android P OTA 初探 —— 1、OTA简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OTA 升级中的跟文件系统切换
- 下一篇: OTA自动化测试解决方案