Spring OXM- 漫談XML解析技術(shù)">Spring OXM- 漫談XML解析技術(shù)
1145
2025-03-31
簡介
從整個流程看,OTA主要分為如下幾個部分:
·???????????? 開發(fā)者使用工具制作升級包
·???????????? 開發(fā)者按照平臺要求上傳升級包
·???????????? 開發(fā)者根據(jù)平臺規(guī)則觸發(fā)升級
·???????????? 端側(cè)和平臺進(jìn)行數(shù)據(jù)交互,下載數(shù)據(jù)包
·???????????? 端側(cè)啟動升級
整個流程如下所示
從流程看, 升級包的制作和上傳都需要開發(fā)者在本地完成;而升級包的下載以及升級包的還原需要端側(cè)完成。需要主要的是:
(1)升級包的制作和端側(cè)設(shè)備是需要配合的,制作相當(dāng)于編碼的過程,而升級還原相當(dāng)于解碼的過程;也就是端側(cè)需要理解開發(fā)者制作的升級包,并能夠完整的解壓出來;本OTA使用HDIFFPATCH作為差分算法以及LZMA作為壓縮算法。
(2)固件包的管理是開發(fā)者和平臺之間的互動;在此過程中,平臺出于安全等因素會制定自己的規(guī)則,需要開發(fā)者對升級包做一定的處理之后才能上傳,通常包含簽名以及添加必要的版本等信息;
下面的章節(jié)就上述流程展開論述。
升級包制作
提供ota_tools作為升級包的制作小工具, 該小工具是使用HDIFFPATCH以及LZMA制作的,提供了界面方便開發(fā)者使用;開發(fā)者也完全根據(jù)自己的需要手動編譯工具或者使用第三方的差分工具來完成。
開發(fā)者使用該工具制作全量升級包以及差分升級包,并決定是否對生成的差分升級包進(jìn)行數(shù)字簽名。對于全量升級包,會使用lzma進(jìn)行壓縮;對于差分升級包,則務(wù)必基于當(dāng)前運(yùn)行的程序制作,否則當(dāng)設(shè)備下載到差分升級包進(jìn)行還原時,還原出的程序和原始程序會不一致。
簡單的而言,對于全量升級包(A.bin為要升級的新程序):
對于差分升級(其中O.bin為舊程序,也是當(dāng)前設(shè)備正在運(yùn)行的程序):
關(guān)于差分制作工具的使用,參考升級包制作工具說明文檔。
升級包打包上傳
當(dāng)前IoT平臺需要先將使用升級包工具制作的升級包a.bin壓縮為a.zip格式,然后使用打包工具進(jìn)行簽名為a.signed.zip,同時需要將打包工具使用的簽名公鑰上傳到IoT平臺上去,這樣才能將a.signed.zip上傳?IoT 固件管理?。
IoT平臺升級流程
IoT平臺的升級流程,主要包含基于LWM2M5號對象的固件升級、基于LWM2M 19號對象的PCP SOTA升級、基于HTTPS(針對MQTT)的軟固件升級。
詳細(xì)流程可以參考IoT平臺升級流程。
設(shè)備端程序開發(fā)說明
針對OTA方案,端側(cè)對于OTA而言主要有幾個工作要實(shí)現(xiàn):升級包下載、升級包存儲、升級包還原。
升級包下載
對于IoT平臺而言,不同的升級方案,其對應(yīng)的升級包下載方式不同,參考IoT平臺升級流程。
對應(yīng)的端側(cè)分別對應(yīng)OTA_HTTPS組件、PCP組件、LWM2M組件。因此需要配合自己的連接方案配置對應(yīng)的升級流程。
升級包存儲
整個升級部分的存儲區(qū)可以劃分為如下幾個部分: 如圖所示:
loader:如果有升級需求,則執(zhí)行升級(解壓縮以及差分還原)
Running:設(shè)備的應(yīng)用程序
Flag:存儲OTA的一些主要FLAG(OTA狀態(tài)、下載升級包大小等,為了防止意外的掉電行為,F(xiàn)LAG需要做備份區(qū)域)
Backup:用于備份當(dāng)前的程序,區(qū)域大小一般選擇和Running區(qū)域大小一致
Download:根據(jù)選擇解決方案(差分還是全量)來定義其大小
為了保持升級交互流程對存儲的調(diào)用統(tǒng)一,因此定義了一個標(biāo)準(zhǔn)的存儲接口,存儲開發(fā)者可以調(diào)用ota_img_bind將自己的存儲接口掛載到系統(tǒng)上。ota_img_init是一個弱符號函數(shù),開發(fā)者在該函數(shù)中初始化存儲資源并將其掛載到系統(tǒng)中。詳細(xì)定義參考o(jì)ta_img.h文件定義。
當(dāng)你已經(jīng)實(shí)現(xiàn)了ota_img_init函數(shù)之后,可以打開CONFIG_OTA_IMG_CHECK來測試你的IMG適配是否OK。該配置項(xiàng)打開之后,會在調(diào)用ota_img_init之后調(diào)用img_check函數(shù),采用產(chǎn)生隨機(jī)數(shù)的形式來不定長度的讀寫IMG,整個過程會模擬FLAG讀取以及存儲、IMG的隨機(jī)長度的讀寫、IMG的backup動作、recover動作以及patch動作,來協(xié)助開發(fā)者檢查自己的IMG適配是否OK。
升級執(zhí)行
對于升級,提供三個api供開發(fā)者調(diào)用,分別為ota_backup(執(zhí)行備份操作,將當(dāng)前運(yùn)行的程序存儲到備份區(qū))、oat_patch(升級還原,根據(jù)下載包的內(nèi)容決定做差分升級還是全量升級)、ota_recover(升級回滾,將備份區(qū)的內(nèi)容拷貝到當(dāng)前執(zhí)行區(qū))。
對于開發(fā)者而言,需要先備份然后執(zhí)行升級,防止意外的升級失敗。
IoT LiteOS 物聯(lián)網(wǎng) IoT
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。