溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

設(shè)備OTA空中升級(jí)原理是怎樣的

發(fā)布時(shí)間:2021-09-17 14:07:21 來(lái)源:億速云 閱讀:157 作者:柒染 欄目:web開(kāi)發(fā)

這篇文章給大家介紹設(shè)備OTA空中升級(jí)原理是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

設(shè)備OTA空中升級(jí)原理是怎樣的

1. 背景

沒(méi)有完美的軟件,因?yàn)樵O(shè)計(jì)缺陷、業(yè)務(wù)需求更新,軟件始終都在不斷升級(jí)完善。新軟件如何替換正在運(yùn)行的舊軟件就是本文關(guān)注的重點(diǎn),尤其是針對(duì)電子產(chǎn)品,設(shè)備空中升級(jí)OTA,受限于硬件資源,需要選擇不同的方案進(jìn)行軟件升級(jí)。

2. 空中升級(jí)流程

在線升級(jí)流程,簡(jiǎn)化就是設(shè)備運(yùn)行舊軟件的同時(shí),獲取新軟件包,再執(zhí)行特殊操作使用新軟件覆蓋舊軟件,最后運(yùn)行新軟件。圖片根據(jù)硬件資源和系統(tǒng)整體框架,選擇不同的升級(jí)方案,方案需要結(jié)合實(shí)際選擇最佳的,技術(shù)層面是次要的。

3. 空中升級(jí)的方案

3.1. 整包升級(jí)

以STM8單片機(jī)升級(jí)為例,單片機(jī)最小系統(tǒng)運(yùn)行流程如下:圖片要加入在線升級(jí)功能,就需要將主應(yīng)用程序拆分,類似有2套程序在設(shè)備內(nèi)運(yùn)行,標(biāo)準(zhǔn)稱呼是bootload+app,其中bootload始終不變,它接收新軟件包并覆蓋app區(qū)域。

硬件限制解決方案
單片機(jī)自身沒(méi)有網(wǎng)絡(luò)連接功能,只能基于外掛的網(wǎng)絡(luò)模塊從遠(yuǎn)端服務(wù)器下載新軟件包,再通過(guò)串口傳輸給單片機(jī)由外掛主機(jī)下載新軟件包,并通知單片機(jī)進(jìn)入升級(jí)模式
單片機(jī)內(nèi)部RAM小,不能進(jìn)行復(fù)制運(yùn)算或者緩存大量數(shù)據(jù);單片EEPROM小,不能保存完整的新軟件包只能在Bootload期間分段接收新軟件并立刻寫(xiě)入flash

整體方案如下圖:

設(shè)備OTA空中升級(jí)原理是怎樣的

難點(diǎn)與風(fēng)險(xiǎn)

單片機(jī)在app收到升級(jí)請(qǐng)求,需要重啟進(jìn)入bootload,對(duì)于以單片機(jī)為主控的設(shè)備,需要保證單片機(jī)重啟期間網(wǎng)絡(luò)模塊不斷電,所以因升級(jí)進(jìn)入bootload要立刻恢復(fù)網(wǎng)絡(luò)模塊主機(jī)供電,必要時(shí)需要硬件支持。

單片機(jī)ram和rom有限,采用分段接收新軟件包,直接寫(xiě)入flash,因此在應(yīng)用層協(xié)議上需要確保數(shù)據(jù)包不會(huì)錯(cuò)誤或遺漏或重發(fā),目前采用Ymodem協(xié)議居多。升級(jí)包需要轉(zhuǎn)成bin文件,單片機(jī)接收后寫(xiě)到app的起始地址。

單片機(jī)分段接收后寫(xiě)入flash,整個(gè)過(guò)程需要10秒以上,期間如果斷電,單片機(jī)軟件的app處于損壞狀態(tài),需要單片機(jī)有超時(shí)機(jī)制重啟,再次開(kāi)啟升級(jí)并主動(dòng)要求網(wǎng)絡(luò)模塊重傳新軟件包。

一般PC軟件無(wú)需考慮內(nèi)存和存儲(chǔ)空間,也是采用整包升級(jí),兩個(gè)文件同時(shí)保存。例如app.exe運(yùn)行時(shí)下載新的app_new.exe,下載校驗(yàn)后,app.exe自毀刪除自身,然后將app_new.exe重命名為app.exe并啟動(dòng)。

3.2. 差分升級(jí)

差分升級(jí)軟件框架同整包升級(jí)一樣,區(qū)別在于新軟件包的提供方式不同。

設(shè)備OTA空中升級(jí)原理是怎樣的

單片機(jī)軟件一般不超過(guò)50KB,復(fù)雜微處理器的軟件一般都比較大,但其RAM也大,下載完整的新軟件包耗時(shí)長(zhǎng)且浪費(fèi)流量,因此可以基于新舊兩版軟件的差異,將差異文件傳給設(shè)備,由設(shè)備運(yùn)算還原出新軟件包升級(jí)。

難點(diǎn)與風(fēng)險(xiǎn)

差分包的制作與還原算法驗(yàn)證,在bootload還原出新軟件包時(shí)考慮到RAM,差分包是按塊生成,還原也是按塊執(zhí)行,每塊新軟件寫(xiě)入前,需要先備份舊塊,防止異常斷電無(wú)法還原。圖片萬(wàn)一出現(xiàn)異常,重啟還是進(jìn)入bootlaod,查詢上次已經(jīng)還原到第幾塊,繼續(xù)后面操作。有些為了再次減小差分包大小,還會(huì)對(duì)文件進(jìn)行壓縮,還原前先解壓。

升級(jí)時(shí),必須保證生成的差分包是基于當(dāng)前設(shè)備內(nèi)運(yùn)行的版本,如設(shè)備運(yùn)行V01,但是提供的差分包卻是基于V02到V03的,則會(huì)導(dǎo)致異常?;蛘咴谖募蓄A(yù)設(shè)特殊版字符,版本匹配才進(jìn)行差分還原升級(jí)。而整包沒(méi)有該缺點(diǎn),只要bootlaod正常,任意app軟件版本可以互相升級(jí)。

3.3. 動(dòng)態(tài)加載

動(dòng)態(tài)加載在PC軟件中很常見(jiàn),多個(gè)exe可執(zhí)行文件共用dll庫(kù)文件,這樣exe文件很小,缺點(diǎn)是要保證exe正常運(yùn)行,需要在指定的路徑下存放dll文件。圖片對(duì)嵌入式平臺(tái),動(dòng)態(tài)加載的可以理解為始終保持底層基礎(chǔ)框架不變,修改或替換不同的上層業(yè)務(wù)邏輯,實(shí)現(xiàn)不同的效果。為保證底層和上層之間調(diào)用關(guān)系,必須固定部分接口地址,也就是兩者中間的接口映射,主要通過(guò)鏈接實(shí)現(xiàn)。圖片嵌入式軟件從源碼到可下載到設(shè)備的映像文件,需要經(jīng)過(guò)的步驟:圖片動(dòng)態(tài)加載就是在鏈接階段,將上層代碼obj編譯成axf可動(dòng)態(tài)加載的文件,而不是直接與其他obj合并成可執(zhí)行文件。主要是使用armlink配置-entry指定映像文件的初始入口點(diǎn)或者在代碼中使用#pragma  arm section  code關(guān)鍵字,保證動(dòng)態(tài)的上層有固定的入口地址。凡是上層調(diào)用的底層接口,在編譯階段函數(shù)體指針都賦為空指令保證編譯,后續(xù)再指向底層的真實(shí)地址。圖片

其作用發(fā)生在系統(tǒng)啟動(dòng)階段,從flash加載到內(nèi)存,整個(gè)文件內(nèi)的接口相對(duì)地址不變,整體偏移。這樣,軟件還是可以計(jì)算獲取動(dòng)態(tài)映像文件的入口地址。加載到內(nèi)存區(qū)域,需確保該區(qū)域不會(huì)被占用,否則內(nèi)存覆蓋肯定會(huì)導(dǎo)致異常。

底層啟動(dòng)后,只能查到動(dòng)態(tài)加載文件的入口函數(shù),但實(shí)際底層與上層交互的接口肯定不止一個(gè),而且上層也必然會(huì)調(diào)用底層接口,這就需要在第一個(gè)明確地址的函數(shù)體內(nèi)實(shí)現(xiàn)上下層地址映射。這里有2種方案,一種是函數(shù)指針賦值,一種是根據(jù)字符串查找。底層需要給上層調(diào)用的接口,底層映射接口函數(shù)指針表,按固定順序賦值給上層函數(shù)指針;或者底層只提供上層一個(gè)函數(shù),但是改函數(shù)體內(nèi)查字符串獲取函數(shù)指針。這樣實(shí)現(xiàn)上層調(diào)用事先固定的底層接口。

上層給底層提供的接口,也是提前固定的函數(shù)指針,也用上面的方法對(duì)接。接口映射的核心是動(dòng)態(tài)加載塊有一個(gè)函數(shù)的地址是鏈接時(shí)指定的,在這個(gè)函數(shù)內(nèi)實(shí)現(xiàn)上下層函數(shù)映射。除函數(shù)外,全局變量也是同樣的使用指針傳遞。

難點(diǎn)與風(fēng)險(xiǎn)

前面2種使用bootload+app的方案,屬于比較常規(guī)的方案,其本質(zhì)是一塊芯片運(yùn)行2套互不干擾的軟件,而動(dòng)態(tài)加載的上下層之間有固定的接口,不能使用接口以外的交互。

動(dòng)態(tài)加載對(duì)鏈接和arm底層要求高,在升級(jí)方向應(yīng)用較少,因?yàn)閷?duì)軟件開(kāi)發(fā)接口使用存在限制,但動(dòng)態(tài)加載實(shí)現(xiàn)了上下層隔離,避免代碼調(diào)用混亂,也為跨平臺(tái)、多語(yǔ)言開(kāi)發(fā)提供了基礎(chǔ)。

4. 結(jié)論

在線升級(jí)為了產(chǎn)品在不召回的情況下,以較低的成本解決售后問(wèn)題;升級(jí)是為了解決問(wèn)題,但是一旦失敗則可能導(dǎo)致設(shè)備變磚。前期測(cè)試應(yīng)選擇不同設(shè)備模擬升級(jí)異常,如強(qiáng)制斷電或軟件包異常,設(shè)備必須有自我恢復(fù)的機(jī)制。

關(guān)于設(shè)備OTA空中升級(jí)原理是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

ota
AI