高通OTA升級非常規分區方法

高通OTA升級非常規分區方法

  • 1. 高通LE OTA背景
  • 2. 高通LE OTA升級方案
    • 2.1 SDX12 OTA方案
    • 2.2 OTA升級TZ/RPM/Aboot

OTA是一個通用述語,常見的解釋為over the air。通過這一解釋,OTA最開始的概念,是空中升級。后來,又衍生出了FOTA,FOAT的概念。

FOTA可以理解為Firmware Over The Air,即在線升級,是指通過模塊的數據通道完成升級包的下載和安裝。此外,FOAT,是模塊項目實踐運用中,發展出來的另一種升級方式,可描述為通過本地升級工具對模塊進行軟件更新的過程。FOAT與FOTA的不同是,升級包的導入方式上的不同。FOAT是通過串口傳輸導入,沒有無線部分的介入。所以兩者只是升級包導入的方式上的不同。在升級包導入到設備后,升級包的安裝更新,都歸為模塊自身的基本升級功能,由Recovery系統來完成。

綜上,在模塊項目中OTA調試,可分為三大塊,即:
在這里插入圖片描述

1. 高通LE OTA背景

高通MDM、MSM平臺提供了基本的升級功能,大概都以開源的Android升級設計實現作為基礎,對其代碼進行移植,適配到自身平臺上。從差分包制作工具,升級過程,都有一套完整的方案,并且所涉及到的工具和代碼均完全開放,因此該方案的可塑性也更大。其中包括統一的用于安裝升級包的Recovery系統,編譯OTA底包專屬框架,和處理底包制作升級包的腳本和工具等。

由于該方案中各個文件的PATCH 基于文件系統而來,因此很難在bootloader 階段實現(無法掛載文件系統),所以在分區設計上,除了預留存放差分包,備份文件的空間外,還需要添加專門的分區(kernel, bootloader,filesystem)以供FOTA 使用,而該分區必須獨立于正常運行時的分區。這也就導致了該方案在硬件(FLASH,DDR)要求比較高。

在LE 的FOTA 方案中,升級程序作為一個應用程序運行,升級包則是一個標準的zip 文件(命名為ota 文件),升級過程則是解析升級包中指定的腳本文件,并根據解析到的內容引用對應的功能模塊,從而完成整個升級過程。

2. 高通LE OTA升級方案

下面主要介紹基于高通LE OTA方案,SDX12做的一些改進,以及如何在SDX12上完成 tz、rpm、appsboot等非常規鏡像或分區的OTA升級。

2.1 SDX12 OTA方案

X12 OTA升級使用的是高通平臺通用的FOTA方案,基本可以總結以下幾個步驟:

  1. 本地制作差分包,并上傳到遠端OTA服務器
  2. x12啟動OTA client線程去在固定間隔時間訪問OTA服務器
  3. 當OTA服務器上有可用OTA 包,則校驗包是否完整、版本號是否符合預期
  4. 若(3)中校驗OK,則下載OTA包到本地
  5. 下載完成后重啟進入recovery模式
  6. recovery模式啟動后會先檢測是否存在OTA包,存在則解壓包并使用包中的工具打patch
  7. 升級完成后設置成功標記并重啟進入boot模式
  8. 升級完成

流程圖如下:
在這里插入圖片描述

高通LE平臺是多個子系統構成,其中boot、system這兩個子系統屬于HLOS鏡像,其他如tz、rpm、appsboot、modem等均為non-HLOS鏡像。

雖然NAND設備 (例如SDX12) 支持non-hlos鏡像的OTA升級,但電源中斷安全升級機制僅適用于system、boot和modem鏡像。啟動關鍵映像 (如tz、rpm、appsboot等) 可以升級,但如果在升級的很短時間內發生電源中斷 (通常為毫秒),設備將處于磚砌狀態。

因此默認OTA方案通常僅建議升級boot、system和modem鏡像,其中boot鏡像是以全包的方式、system鏡像以文件patch方式、modem以壓縮拆分后的patch方式:
在這里插入圖片描述
但由于boot鏡像占用較大的空間,對于硬件(FLASH,DDR)要求比較高。很多時候無法滿足,因此我們在高通LE OTA升級方案上做出如下優化:將boot鏡像也以patch的方式進行升級,這樣就可以減少對于硬件(FLASH,DDR)要求,滿足低存儲空間的場景。
在這里插入圖片描述

2.2 OTA升級TZ/RPM/Aboot

但是還存在客戶想OTA升級啟動關鍵映像 (如tz、rpm、appsboot等),如客戶有屏幕的場景,想更新開機動畫,而開機動畫在sbl階段就已經開始,因此就需要去升級appsboot鏡像。雖然啟動關鍵映像 (如tz、rpm、appsboot等) 可以升級,但如果在升級的很短時間內發生電源中斷 (通常為毫秒),設備將處于磚砌狀態。但高通針對這種情況,也是提供了對應的升級方案,但不建議使用,下面我們將簡單介紹如何去OTA升級這些非常規的分區。

根據高通文檔80-16206-49 AA,我們可以看到如我們想升級non-hlos鏡像,只需將這些鏡像打包在OTA目標版本底包的RADIO目錄下即可。

在這里插入圖片描述
按照上述方法,我們手動將appsboot鏡像打包到RADIO目錄下:

在這里插入圖片描述
然后使用OTA差分制作工具制作差分包,就可以在OTA差分包firmware目錄下看到appsboot鏡像,當升級時就會按照patch腳本去打patch升級appsboot鏡像:

在這里插入圖片描述
在差分包的patch腳本META-INF\com\google\android\updater-script中也確實可以看到appsboot鏡像將以raw鏡像的方式升級:

在這里插入圖片描述

但上面這種方式需要手動打包tz、rpm、appsboot等鏡像到OTA目標版本底包中,這樣是非常不便利的,因此修改ota底包制作流程,將tz、rpm、appsboot等鏡像按需打包進OTA底包中:

在這里插入圖片描述

但如果我們在目標和當前版本OTA底包中都放上tz、rpm、appsboot等鏡像,又會導致他們會以patch的方式升級,而tz、rpm、appsboot等鏡像本身就只有不到1M的空間,因此完全無需patch方式,因此修改差分包制作工具,判斷當文件為tz、rpm、appsboot等鏡像時,無需制作patch,直接拷貝目標鏡像即可。

在這里插入圖片描述
通過上述這些修改,就可以完成OTA升級tz、rpm、appsboot等非常規分區。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162797.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中國智能汽車這一年,主打一個“卷”

文丨劉俊宏 “這才剛過去半年多,汽車行業又更新了一輪。”一位車評人在廣州車展感嘆道。 作為每年最后一個A級車展,廣州車展向來被視為中國車市的“風向標”。相比上海車展“擁抱汽車行業新時代”、成都車展“馭見未來”的主題,廣州車展“新…

數據結構(超詳細講解!!)第二十四節 二叉樹(上)

1.定義 二叉樹(Binary Tree)是另一種樹型結構。 二叉樹的特點: 1)每個結點至多只有兩棵子樹(即二叉樹中不存在度大于2的結點); 2)二叉樹的子樹有左右之分,其次序…

python爬蟲教程:selenium常用API用法和瀏覽器控制

文章目錄 selenium apiwebdriver常用APIwebelement常用API 控制瀏覽器 selenium api selenium新版本(4.8.2)很多函數,包括元素定位、很多API方法均發生變化,本文記錄以selenium4.8.2為準。 webdriver常用API 方法描述get(String url)訪問目標url地址&…

分布式鎖之傳統鎖回顧(一)

1. 傳統鎖回顧 1.1. 從減庫存聊起 多線程并發安全問題最典型的代表就是超賣現象 庫存在并發量較大情況下很容易發生超賣現象,一旦發生超賣現象,就會出現多成交了訂單而發不了貨的情況。 場景: 商品S庫存余量為5時,用戶A和B同…

python:可迭代的數據類型、可變的數據類型、不可變的數據類型

python:可迭代的數據類型、可變的數據類型、不可變的數據類型 文章目錄 python:可迭代的數據類型、可變的數據類型、不可變的數據類型可迭代的數據類型可變的數據類型不可變的數據類型 可迭代的數據類型 序列:str、bytes、tuple、list非序列…

PC8223(CC/CV控制)高耐壓輸入5V/3.4A同步降壓電路內建補償帶恒流恒壓輸出

概述 PC8233(替代CX8853)是一款同步降壓調節器,輸出電流高達3.4A,操作范圍從8V到32V的寬電源電壓。內部補償要求最低數量現成的標準外部組件。PC8233在CC(恒定輸出電流)模式或CV(恒定輸出電壓)模式&#x…

莫托曼機器人測溫程序

1機器程序 2.1 主程序 MAIN: NOP CALL JOB:ORG *1 JUMP *5 IF IN#(41)OFF CALL JOB:遠程 IF IN#(25)ON CALL JOB:本地 IF IN#(26)ON CALL JOB:測距判斷 CALL JOB:最后一支 *5 CALL JOB:PZ IF IN#(35)ON CALL JOB:PZ IF IN#(65)ON JUMP *1 END 1.2 本地程序 1、本地…

代碼隨想錄算法訓練營Day 60 || 84.柱狀圖中最大的矩形

84.柱狀圖中最大的矩形 力扣題目鏈接(opens new window) 給定 n 個非負整數&#xff0c;用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰&#xff0c;且寬度為 1 。 求在該柱狀圖中&#xff0c;能夠勾勒出來的矩形的最大面積。 1 < heights.length <10^50 < hei…

CVE-2022-0543(Redis 沙盒逃逸漏洞)

簡介 CVE-2022-0543是一個與Redis相關的安全漏洞。在Redis中&#xff0c;用戶連接后可以通過eval命令執行Lua腳本&#xff0c;但在沙箱環境中腳本無法執行命令或讀取文件。然而&#xff0c;攻擊者可以利用Lua沙箱中遺留的變量package的loadlib函數來加載動態鏈接庫liblua5.1.s…

VirtualBox下win主機如何訪問linux虛擬機文件夾

目錄 ?編輯 方法1&#xff1a;通過VirtualBox自帶的共享文件夾&#xff08;Win->linux&#xff09; 方法2&#xff1a;通過Samba方法本地網絡訪問(Linux->win) 我使用的VirtualBox版本為7.0.4,主機是Window系統&#xff0c;虛擬機是Linux系統 方法1&#xff1a;通過Vir…

【SpringBoot篇】Spring_Task定時任務框架

文章目錄 &#x1f339;概述&#x1f33a;應用場景&#x1f384;cron表達式&#x1f6f8;入門案例&#x1f38d;實際應用 &#x1f339;概述 Spring Task 是 Spring 框架提供的一種任務調度和異步處理的解決方案。可以按照約定的時間自動執行某個代碼邏輯它可以幫助開發者在 S…

PTA-快速冪

要求實現一個遞歸函數&#xff0c;高效求ab(1≤a,b≤62,ab<263)。 函數接口定義&#xff1a; long long int pow(int a, int b); 其中a 、b 是用戶傳入的參數。 裁判測試程序樣例&#xff1a; #include<iostream> using namespace std; long long int pow(int a,…

數據結構 棧與隊列

棧 棧是一種 后進先出&#xff08; LIFO&#xff09; 的數據結構&#xff0c;它是一種線性的、有序的數據結構。棧的基本操作有兩個&#xff0c;即入棧和出棧。入棧指將元素放入棧頂&#xff0c;出棧指將棧頂元素取出。棧的本質是一個容器&#xff0c;它可以存儲任何類型的數…

String轉Date,Date轉String

源碼&#xff1a; Date currentTime new Date();System.out.println("currentTime:"currentTime);SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString formatter.format(currentTime);System.out.println(&quo…

【深度學習】學習率及多種選擇策略

學習率是最影響性能的超參數之一&#xff0c;如果我們只能調整一個超參數&#xff0c;那么最好的選擇就是它。相比于其它超參數學習率以一種更加復雜的方式控制著模型的有效容量&#xff0c;當學習率最優時&#xff0c;模型的有效容量最大。本文從手動選擇學習率到使用預熱機制…

qt msvc2010 qdatetime.h:122: error: C2589: “(”:“::”右邊的非法標記

報錯內容&#xff1a; C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2589: “(”:“::”右邊的非法標記 C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2059: 語法錯誤:“::” 解決方法&#xff1a; 打開qd…

2023小紅書Android面試之旅

一面 自我介紹 看你寫了很多文章&#xff0c;拿你理解最深刻的一篇出來講一講 講了Binder相關內容 Binder大概分了幾層 哪些方法調用會涉及到Binder通信 大概講一下startActivity的流程&#xff0c;包括與AMS的交互 全頁面停留時長埋點是怎么做的 我在項目中做過的內容&am…

RocketMQ-NameServer詳解

前言 ? RocketMQ架構上主要分為四部分, Broker、Producer、Consumer、NameServer&#xff0c;其他三個都會與NameServer進行通信。 Producer: ? **消息發布的角色&#xff0c;可集群部署。**通過NameServer集群獲得Topic的路由信息&#xff0c;包括Topic下面有哪些Queue&a…

PTA-病毒感染檢測

人的DNA和病毒DNA均表示成由一些字母組成的字符串序列。然后檢測某種病毒DNA序列是否在患者的DNA序列中出現過&#xff0c;如果出現過&#xff0c;則此人感染了該病毒&#xff0c;否則沒有感染。例如&#xff0c;假設病毒的DNA序列為baa&#xff0c;患者1的DNA序列為aaabbba&am…

數據結構與算法編程題15

設計一個算法&#xff0c;通過遍歷一趟&#xff0c;將鏈表中所有結點的鏈接方向逆轉&#xff0c;仍利用原表的存儲空間。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; …