国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LuatOS FOTA升級(jí)全解析

合宙LuatOS ? 來(lái)源:合宙LuatOS ? 作者:合宙LuatOS ? 2026-02-04 15:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在實(shí)際項(xiàng)目中,Core優(yōu)化與腳本迭代往往需要同步推進(jìn)。LuatOS支持腳本與Core的聯(lián)合FOTA升級(jí),極大提升維護(hù)靈活性。本文將系統(tǒng)講解升級(jí)包制作、版本號(hào)管理、設(shè)備綁定等環(huán)節(jié),助你構(gòu)建完整的遠(yuǎn)程維護(hù)能力。

一、Flash 分區(qū)與 FOTA 分區(qū)簡(jiǎn)介

大家好,在開始動(dòng)手操作 FOTA 之前,我們必須先了解它的“工作場(chǎng)地”——模組內(nèi)部的 Flash 存儲(chǔ)器。這就像裝修房子前,一定要先看懂戶型圖。

不同型號(hào)的模組,F(xiàn)lash 分區(qū)就像不同的“戶型”,格局各異,但都有一個(gè)核心設(shè)計(jì):必須有一個(gè)獨(dú)立的“系統(tǒng)升級(jí)專用間”,也就是 FOTA 分區(qū)。

今天,我們就以 Air780EHM 為例,來(lái)詳細(xì)解讀這份關(guān)鍵的“Flash 戶型圖”。

wKgZPGmCvx2AfBGVAAKdaf0OKsw654.png

首先,我們看全局。Air780EHM 的 Flash 是一棟總?cè)萘?8MB 的“大樓”。但這里有個(gè)精妙的設(shè)計(jì):這棟樓有兩個(gè)門牌號(hào)系統(tǒng)。

物理地址(0x0 – 8MB):這是 Flash 芯片真實(shí)的“磚塊地址”,用于存儲(chǔ)所有數(shù)據(jù)。

XIP 映射地址(8MB – 16MB):CPU 執(zhí)行代碼時(shí)“看到”的地址。系統(tǒng)固件被“映射”到這個(gè)區(qū)域,CPU 可以直接讀取執(zhí)行,這叫 XIP(就地執(zhí)行)。

簡(jiǎn)單來(lái)說(shuō),固件實(shí)體存放在物理地址的低 8MB,而當(dāng) CPU 要運(yùn)行時(shí),它“看到”的是從 8MB 開始的那段地址。

大家可以看到,flash 中分區(qū)很多,但作為 LuatOS 開發(fā)者,我們主要關(guān)注其中四個(gè)“房間”:ap+cp image 分區(qū)(包含腳本代碼區(qū))、LFS 分區(qū)、KV 分區(qū)和 FOTA 分區(qū)

1.1 ap+cp image 分區(qū)– “主系統(tǒng)套房”:

作用 :這是設(shè)備的操作系統(tǒng)和核心應(yīng)用所在,相當(dāng)于電腦的 C 盤。它包含了底層 C 固件、Lua 虛擬機(jī),以及最重要的——腳本區(qū)。

腳本區(qū):這是我們 Lua 代碼的“家”。代碼在這里擁有持久化特性,只有固件升級(jí)時(shí)才會(huì)被整體更新。它的大小在編譯時(shí)就已經(jīng)固定,不同固件版本會(huì)有差異,

腳本區(qū)大小會(huì)根據(jù)模組型號(hào)不同,固件編號(hào)不同也會(huì)有差別,大小在編譯時(shí)固定

1.2 LFS 分區(qū)– “用戶資料室” :

作用:提供一個(gè)小型文件系統(tǒng),用于存儲(chǔ)用戶數(shù)據(jù)和配置。

特點(diǎn):具有持久化存儲(chǔ),斷電不丟失 、可動(dòng)態(tài)寫入和讀取、支持文件系統(tǒng) API 訪問(wèn)、可隨時(shí)創(chuàng)建和刪除的特性。可以用來(lái)儲(chǔ)存用戶配置文件、設(shè)備運(yùn)行日志、網(wǎng)絡(luò)配置信息、臨時(shí)數(shù)據(jù)和緩存、用戶生成的文件。

文件系統(tǒng)空間大小會(huì)根據(jù)模組型號(hào)不同,固件編號(hào)不同也會(huì)有差別,實(shí)際大小= 基礎(chǔ) lfs 空間 + 附件空間。

附加空間通常是去掉某些功能所節(jié)省出來(lái)的空間,所以有了不同編號(hào)的固件,來(lái)實(shí)現(xiàn)不同功能 + 大內(nèi)存的需求。

1.3 KV 分區(qū)– “配置存儲(chǔ)間”:

作用:KV(Key-Value)分區(qū)是一個(gè)小型的鍵值對(duì)存儲(chǔ)區(qū)域,用于保存設(shè)備的配置信息和狀態(tài)數(shù)據(jù)。

特點(diǎn):

持久化存儲(chǔ):斷電后數(shù)據(jù)不丟失

高效訪問(wèn):支持快速的鍵值對(duì)讀寫操作

固定大小:通常為 64KB

輕量級(jí):適合存儲(chǔ)少量關(guān)鍵配置,如網(wǎng)絡(luò)參數(shù)、設(shè)備 ID、運(yùn)行狀態(tài)等

KV 分區(qū)的典型用途:

存儲(chǔ)設(shè)備唯一標(biāo)識(shí)符

保存網(wǎng)絡(luò)連接參數(shù)(APN、服務(wù)器地址等)

記錄設(shè)備運(yùn)行狀態(tài)和統(tǒng)計(jì)信息

存儲(chǔ)用戶自定義配置

保存升級(jí)狀態(tài)和版本信息

1.4 FOTA 分區(qū)“系統(tǒng)升級(jí)專用間”:

1.4.1 分區(qū)介紹

作用 :這是今天的主角,用于臨時(shí)存放固件升級(jí)包,實(shí)現(xiàn)安全、隔離的遠(yuǎn)程升級(jí)。

fota 分區(qū)具有以下特性:

1、獨(dú)立空間 :與其他分區(qū)嚴(yán)格分離,確保升級(jí)安全,從網(wǎng)絡(luò)或其他渠道下載的完整固件包或差分包先存儲(chǔ)到 FOTA 分區(qū)

2、安全機(jī)制 :支持升級(jí)包完整性校驗(yàn)和簽名驗(yàn)證,升級(jí)包寫入 FOTA 分區(qū)后會(huì)進(jìn)行 MD5 校驗(yàn),確保傳輸未損壞

FOTA 升級(jí)的核心安全規(guī)則:為什么“戶型”要對(duì)齊?

這里有一個(gè)至關(guān)重要的安全限制,可以通過(guò)下面這個(gè)表格來(lái)了解:

wKgZPGmCwUmASo8kAAEIGbjeRlk858.png

通過(guò)上面表格可以看出,雖然兩個(gè)固件的 FOTA 分區(qū)大小完全一樣,但它們的 fota 分區(qū)、ap+cp 分區(qū)和 LFS 分區(qū)的起始、結(jié)束地址發(fā)生了偏移。

結(jié)論:使用錯(cuò)誤編號(hào)的固件包升級(jí)時(shí),其設(shè)計(jì)的分區(qū)地址與設(shè)備當(dāng)前分區(qū)布局不匹配。FOTA 機(jī)制會(huì)在升級(jí)包寫入前校驗(yàn)升級(jí)包,將會(huì)檢查出完整性異常,并返回升級(jí)失敗。

所以會(huì)有一個(gè)鐵律:不同編號(hào)的固件之間不能進(jìn)行 fota 升級(jí),F(xiàn)OTA 差分升級(jí)只能在相同編號(hào)的固件版本之間進(jìn)行。 既編號(hào) 1 固件只能差分升級(jí)為新版本的編號(hào) 1 固件,編號(hào) 2 固件只能差分升級(jí)為新版本的編號(hào) 2 固件。在制作升級(jí)包時(shí),務(wù)必首先確認(rèn)這個(gè)編號(hào)匹配關(guān)系。

如果不同編號(hào)固件間升級(jí) :需要使用完整包重新燒錄,不能使用 fota 升級(jí)

雖然這個(gè)房間總大小 1048KB,但是 fota 升級(jí)包大小并不等于 fota 分區(qū)空間大小。

在不同編號(hào)的固件版本規(guī)劃中,為了容納不同的功能,其整個(gè) Flash 的分區(qū)表布局(包括 FOTA、AP、CP、LFS 等分區(qū)的起始地址和大小)是預(yù)先定義好且固定的。因此,不同編號(hào)的固件,其 FOTA 分區(qū)大小可能相同也可能不同,但更關(guān)鍵的是其在整個(gè) Flash 中的"位置"(地址)不同。所以具體 fota 分區(qū)大小可以看 1.5 章節(jié)具體表格。

1.4.2 升級(jí)流程

初始化 FOTA → 下載升級(jí)包 → 寫入 FOTA 分區(qū) → MD5 校驗(yàn) → 設(shè)置升級(jí)標(biāo)志 → 重啟

重啟后:Bootloader 檢查升級(jí)標(biāo)志 → 驗(yàn)證升級(jí)包 → 寫入目標(biāo)分區(qū) → 啟動(dòng)新固件 → 驗(yàn)證新固件

wKgZPGmC0L2AWtPdAAErH0G7Ffs017.pngwKgZO2mC0O6ANprGAACm1V8X-Hk140.pngwKgZPGmC0QeAKD7eAACAk_Lp5VA726.png

1、升級(jí)包寫入流程:

初始化 FOTA 模塊: 創(chuàng)建升級(jí)上下文結(jié)構(gòu)體,分配必要的緩沖區(qū)和資源,為升級(jí)流程做準(zhǔn)備。

下載升級(jí)包:

通過(guò) HTTP、MQTT 或 UART通信協(xié)議從服務(wù)器或本地下載升級(jí)包數(shù)據(jù)。支持下載到文件系統(tǒng),或者直接分包寫入 fota 分區(qū)。

寫入 FOTA 分區(qū):

如果是下載到文件系統(tǒng)中暫存,待整個(gè)升級(jí)包在文件系統(tǒng)中下載完成后,再一次性從文件系統(tǒng)讀取并寫入到專用的 FOTA 分區(qū)。

也可以實(shí)時(shí)分包接收升級(jí)包數(shù)據(jù)并寫入到文件系統(tǒng)中。

完成寫入,驗(yàn)證升級(jí)包:

執(zhí)行升級(jí)包的完整性校驗(yàn)(MD5)

若校驗(yàn)通過(guò),則在特定位置中設(shè)置升級(jí)標(biāo)志,并重啟系統(tǒng)。Bootloader 下次啟動(dòng)時(shí)執(zhí)行升級(jí)。

若校驗(yàn)失敗,則報(bào)告錯(cuò)誤并終止升級(jí)流程。

2、重啟后升級(jí)流程:

設(shè)備上電,執(zhí)行 Bootloader

設(shè)備重啟后,Bootloader 首先檢查是否存在有效的升級(jí)標(biāo)志。

驗(yàn)證與執(zhí)行升級(jí) 若無(wú)升級(jí)標(biāo)志:Bootloader 跳過(guò)升級(jí)流程,直接啟動(dòng)現(xiàn)有固件。 若存在升級(jí)標(biāo)志:

1.5 各模組 fota 分區(qū)空間

在實(shí)際使用中,不同的固件版本或型號(hào)為了支持不同的功能,會(huì)調(diào)整 FOTA 分區(qū)內(nèi)的大小,因此用戶實(shí)際可用的升級(jí)空間可查看下表。

Air7xx 系列模組 LuatOS 多固件版本

wKgZPGmC0bGATy1QAACPPX52ZKs938.pngwKgZPGmC0dKAUxDqAACju2s0nJY452.png

Air8000 系列固件版本

wKgZO2mC0kSAYGvLAACfdUR5qQs614.png

二、soc 軟件包文件分析

“理解了 FOTA 的‘工作場(chǎng)地’(Flash 分區(qū)),接下來(lái)一個(gè)很自然的問(wèn)題是:我們要通過(guò)網(wǎng)絡(luò)下載并寫入這個(gè)場(chǎng)地的‘升級(jí)包’,它到底是什么?

這個(gè)核心的升級(jí)包就是 .soc 文件。它不是一個(gè)普通的固件,而是合宙定義的標(biāo)準(zhǔn)化容器。在 FOTA 流程中,它扮演著三個(gè)關(guān)鍵角色:

它是差分的藍(lán)本:我們下一章要講的‘差分升級(jí)’,其核心就是對(duì)比新舊兩個(gè)版本的.soc 文件,生成差異部分。

它攜帶了分區(qū)地圖:.soc 包內(nèi)的info.json配置文件,明確寫明了本固件的編號(hào)、分區(qū)地址等信息,這是 FOTA 進(jìn)行安全校驗(yàn)(防止變磚)的核心依據(jù)。

它統(tǒng)一了操作對(duì)象:無(wú)論底層是移芯還是展銳芯片,最終都封裝成統(tǒng)一的.soc 格式,讓升級(jí)工具和流程得以標(biāo)準(zhǔn)化。

所以,拆解.soc 文件,就是理解 FOTA 操作對(duì)象和實(shí)現(xiàn)原理的基礎(chǔ)。明白了它里面有什么,你才能徹底搞懂后續(xù)的差分生成和升級(jí)執(zhí)行究竟在操作什么。”

下面講解一下模組所用固件包.soc 文件的組成以及格式相關(guān)內(nèi)容。

2.1 soc 簡(jiǎn)介

.soc 文件,是我們?cè)?2021 年自定義的一個(gè)文件,該文件, 用于用一種通用的格式,保存不同型號(hào)模組的固件。


該文件格式的優(yōu)點(diǎn)是可以屏蔽模組差異, 對(duì)用戶通用, 對(duì)Luatools 通用;

缺點(diǎn)是,當(dāng)前的 IOT 升級(jí)后臺(tái)尚且無(wú)法支持這個(gè)格式。

對(duì)于遠(yuǎn)程升級(jí)來(lái)說(shuō), 必須用 Luatools 內(nèi)置的差分包制作工具, 輸入兩個(gè)不同版本的 soc文件, 生成一個(gè).bin 結(jié)尾的差分包,才能上傳到 IOT 后臺(tái)進(jìn)行遠(yuǎn)程升級(jí)。


LuatOS 將來(lái)會(huì)適配非常多的 SoC/MCU 芯片來(lái)設(shè)計(jì)模組, 而各種模組的刷機(jī)格式各不相同,有必要定義一個(gè)統(tǒng)一的對(duì)外格式。

這里稱之為 soc 格式, 后綴選定為 soc, 實(shí)際內(nèi)容為 info.json 及多個(gè)固件文件的壓縮包。

2.2 SoC 組成部分

[必選]包含的文件 info.json

[可選]腳本數(shù)據(jù)存儲(chǔ)文件 script.bin, 使用 LuaDB v2 格式存儲(chǔ)

[必選]原始固件,以不同 SoC 芯片為準(zhǔn)

2.2.1 info.json 的內(nèi)容

info.json 是固件配置文件,包含固件的詳細(xì)參數(shù)和配置信息。以 780EHM 的 2018 版本 1 號(hào)固件解壓后打開 info.json,具體包含如下參數(shù):

wKgZPGmC06KAAio-AAdSrFf6fjw243.png

2.2.2 腳本數(shù)據(jù)文件 script.bin

在給出的底層固件中并不包含此文件,此文件是在 luatools 工具點(diǎn)擊生成量產(chǎn)文件后所生成的。是 Lua 腳本的二進(jìn)制文件,包含了用戶編寫的應(yīng)用程序代碼。文件格式為 LuaDB 格式存儲(chǔ)。

LuaDB 并非數(shù)據(jù)庫(kù), 而是一種用于 LuatOS 固件的文件打包格式.

其作用相當(dāng)于一個(gè)只讀文件系統(tǒng).

2.2.3 原始固件

原始固件是構(gòu)成 .soc 文件的核心數(shù)據(jù)部分,指由芯片原廠(如展銳、移芯)提供的底層系統(tǒng)映像文件。其格式依芯片平臺(tái)而定,常見后綴包括 .pac、.binpkg、.fls、.img 等。該固件包含了操作系統(tǒng)內(nèi)核、基礎(chǔ)驅(qū)動(dòng)、通信協(xié)議棧等核心代碼,是設(shè)備功能運(yùn)行的基石。

在 .soc 文件體系中,info.json 配置文件內(nèi)的 "rom" -> "file" 字段即指明了所包含的原始固件文件名(例如 "luatos.binpkg")。該文件與 info.json、可選的 script.bin 一同被打包壓縮,最終形成統(tǒng)一的 .soc 分發(fā)文件。

展銳平臺(tái):

展銳平臺(tái)的 4G 模組,當(dāng)前我們用的是 8910 平臺(tái),典型模組是Air724UG,編譯之后的文件后綴為 PAC, 可以用展銳提供的upgrade 固件燒錄工具燒錄,也可以用 Luatools 燒錄。

移芯平臺(tái):

移芯平臺(tái)的 4G 模組,我們用的有 EC718、EC618、716 等。典型模組是 Air780EXX 系列、Air8000 系列。

移芯平臺(tái)編譯出來(lái)的固件,都是 binpkg 后綴結(jié)尾的固件,可以用移芯提供的 flashtool 工具燒錄,也可以用 Luatools 燒錄。

對(duì)于最終用戶和開發(fā)者而言,無(wú)論底層原始固件格式如何,均推薦使用 Luatools 配合 .soc 文件進(jìn)行下載和升級(jí)。

所以,.soc文件的核心就在于,用一個(gè)外層的標(biāo)準(zhǔn)化包裝,封裝了內(nèi)部不同平臺(tái)的原生固件,讓用戶和工具都能用同一種方式處理它們。

2.3 soc 實(shí)際文件分析

soc 解壓后實(shí)際文件在不同的模組中也不盡相同,但是都是 info.json+ 原始固件 + 輔助文件 + 腳本數(shù)據(jù)文件組成。

下面以移芯系列固件為例:將 .soc 壓后會(huì)得到 7 個(gè)核心文件: comdb.txt 、 info.json 、 luat_conf_bsp.h 、 luatos.binpkg 、 luatos.elf 、 luatos_debug.map 、 mem_map.txt 。而使用 Luatools 生成量產(chǎn)文件后,還會(huì)多出兩個(gè)文件: core.binpkg 和 script.bin 。

這些文件各司其職,共同構(gòu)成了一個(gè)完整的固件系統(tǒng)。接下來(lái),我們逐個(gè)分析它們的作用。

還是以 780ehm 為例,看下它的固件 soc 解壓后都有哪些文件:

wKgZPGmC1DuAU--nAACL8AXBHxw161.png

info.json

第一個(gè)要介紹的是 info.json ,這是固件的核心配置文件,相當(dāng)于固件的"身份證"。

這個(gè)文件主要包含有:

芯片類型(

ROM 文件信息及下載地址

腳本文件信息及下載地址

分區(qū)表配置

下載參數(shù)(波特率、強(qiáng)制波特率等)

luatos.binpkg

LuatOS 的核心二進(jìn)制固件包,包含了系統(tǒng)運(yùn)行所需的所有核心代碼。

.binpkg 為移芯系列芯片所生成的原始固件內(nèi)容,是移芯芯片特有的格式,不同的芯片會(huì)有不同的原始固件格式

其他輔助文件

mem_map.txt:這是設(shè)備內(nèi)存的"地圖",內(nèi)存映射配置文件,定義了設(shè)備內(nèi)存的分區(qū)結(jié)構(gòu)和地址范圍。

luat_conf_bsp.h :支持功能配置頭文件,定義了一些功能相關(guān)的配置宏,比如引腳定義、外設(shè)配置等。

luatos.elf :包含完整調(diào)試信息的可執(zhí)行文件,開發(fā)通常用不到,出現(xiàn) ramdump 死機(jī)的時(shí)候用于解析死機(jī)日志時(shí)使用。

luatos_debug.map :調(diào)試映射文件,記錄了函數(shù)和變量在內(nèi)存中的地址。

comdb.txt :組件數(shù)據(jù)庫(kù)文件,記錄了固件中包含的各種組件信息,使用 EPAT 抓取日志時(shí)需要。

在 luatools 上點(diǎn)擊生成量產(chǎn)文件后,量產(chǎn)文件也是一個(gè) soc 文件,解壓后除了上述內(nèi)容外還會(huì)多出兩個(gè)文件:core.binpkg、script.bin

core.binpkg :核心固件包,包含了系統(tǒng)的核心功能。

script.bin :Lua 腳本的二進(jìn)制文件,包含了用戶編寫的應(yīng)用程序代碼。這是一個(gè)非常重要的文件,它支持單獨(dú)更新腳本,無(wú)需重新下載完整固件。

總的來(lái)說(shuō),.soc 文件就是一個(gè)集配置文件、核心固件、用戶腳本于一體的標(biāo)準(zhǔn)化容器。它解決了多平臺(tái)統(tǒng)一管理的問(wèn)題,并通過(guò) info.json 實(shí)現(xiàn)精細(xì)控制,實(shí)現(xiàn)固件燒錄、差分升級(jí)等功能。為后續(xù)的差分升級(jí)打下了堅(jiān)實(shí)的基礎(chǔ)。那么,如何利用兩個(gè)不同版本的.soc 文件,生成一個(gè)體積小巧的升級(jí)包呢?這就是我們接下來(lái)要揭秘的——差分升級(jí)的奧秘

三、差分包生成原理以及差分升級(jí)原理

3.1 差分升級(jí)的基本概念

在 FOTA(無(wú)線固件升級(jí))中,升級(jí)方式主要分為兩種:整包升級(jí)和差分升級(jí)。

整包升級(jí):指將完整的新版本固件包全部下載至設(shè)備,并完全覆蓋設(shè)備上現(xiàn)有的舊版本固件。其過(guò)程直接,但數(shù)據(jù)量大。

差分升級(jí):是一種增量更新技術(shù)。其核心在于,設(shè)備無(wú)需下載完整的新固件包,而是僅下載新舊兩個(gè)固件版本之間的差異部分(即“差分包”)。設(shè)備在本地利用此差分包與自身已有的舊版本固件進(jìn)行合并,從而生成完整的新版本固件。

一個(gè)生動(dòng)的比喻是:你手中有一本舊版的書籍,出版社發(fā)布了修訂版,但實(shí)際內(nèi)容只更改了其中的 30 頁(yè)。此時(shí),你無(wú)需購(gòu)買整本新書,只需獲取這 30 頁(yè)的修訂頁(yè),并替換舊書中對(duì)應(yīng)的頁(yè)面即可。差分升級(jí)正是這一高效思路在固件更新上的體現(xiàn)。

傳統(tǒng)整包升級(jí)的痛點(diǎn):

升級(jí)包體積大:消耗大量網(wǎng)絡(luò)帶寬與設(shè)備存儲(chǔ)空間。

升級(jí)耗時(shí)長(zhǎng):下載時(shí)間長(zhǎng),升級(jí)過(guò)程慢,影響用戶體驗(yàn)。

流量成本高:對(duì)于部署量龐大的物聯(lián)網(wǎng)設(shè)備群,升級(jí)產(chǎn)生的總流量成本非常顯著。

差分升級(jí)的顯著優(yōu)勢(shì):

體積極小:差分包通常僅為完整新固件包的 10%-30%,甚至更低。

速度極快:下載時(shí)間大幅縮短,升級(jí)效率顯著提升。

可靠性更高:傳輸數(shù)據(jù)量小,在弱網(wǎng)環(huán)境下傳輸失敗或出錯(cuò)的概率降低。

成本大幅節(jié)省:在海量設(shè)備升級(jí)場(chǎng)景下,能節(jié)省可觀的流量費(fèi)用與服務(wù)器帶寬成本。

3.2 差分升級(jí)原理:只傳"差異",不傳"全部"

差分升級(jí)的技術(shù)本質(zhì)可概括為 “計(jì)算差異、傳輸差異、應(yīng)用差異”。其核心在于通過(guò)算法比對(duì),僅處理和傳輸發(fā)生變化的數(shù)據(jù)塊,而非整個(gè)文件。

具體來(lái)說(shuō),在升級(jí)前,會(huì)使用專門的算法工具(luatools),對(duì)舊固件(V1)和新固件(V2)的二進(jìn)制內(nèi)容進(jìn)行深度比對(duì),精確找出所有被修改、新增或刪除的數(shù)據(jù)塊。然后,只將這些“差異”信息,打包成一個(gè)結(jié)構(gòu)化的差分包(Δ)。設(shè)備獲取這個(gè)小包后,在本地執(zhí)行反向操作,根據(jù)包內(nèi)的指引,將差異應(yīng)用到自身的 V1 版本上,從而重構(gòu)出 V2。

1. 差分包生成原理

差分升級(jí)的核心是 差異比較算法 ,常用的有:

BSDiff :基于后綴排序的高效差異算法

HDiffPatch :高性能的差異比較庫(kù)

Rsync 算法 :用于網(wǎng)絡(luò)傳輸?shù)牟町愃惴?/p>

我們的 Luatools 等工具就集成了這類算法,能夠智能地比較兩個(gè).soc 文件或原始固件,生成最優(yōu)的差分包。

2. 差分包的組成

一個(gè)標(biāo)準(zhǔn)的差分包(通常為.bin 文件)是一個(gè)精心設(shè)計(jì)的數(shù)據(jù)包,通常包含::

差異數(shù)據(jù) :新舊固件的二進(jìn)制差異

元信息 :版本號(hào)、校驗(yàn)值、生成時(shí)間

合并指令 :指導(dǎo)設(shè)備如何合并生成新固件

校驗(yàn)機(jī)制 :確保差分包完整性和安全性

3. 差分升級(jí)的工作流程

下面看一下差分升級(jí)的工作流程,具體流程如下:

wKgZO2mC1XyACP5GAACuaMsgijA663.png

流程詳解:

1、生成階段:在 luatools 上,指定新舊版本 V1 和 V2,生成一個(gè)包含合并指令和差異數(shù)據(jù)的差分包(Δ)。

2、傳輸階段:這個(gè)極小的差分包通過(guò)蜂窩網(wǎng)絡(luò)、以太網(wǎng)藍(lán)牙Wi-Fi 或本地串口等渠道,高效地下發(fā)到設(shè)備。

3、應(yīng)用階段:設(shè)備端在設(shè)備的固件升級(jí)功能模塊控制下,完成差分包校驗(yàn)、新固件合并寫入與最終驗(yàn)證后,重啟切換至新版本固件完成升級(jí)的過(guò)程。

四、單腳本升級(jí)以及 core+ 腳本升級(jí) 升級(jí)包制作

4.1 LuatOS 開發(fā)結(jié)構(gòu)

LuatOS 二次開發(fā)由兩部分組成:

Core 部分:既底層固件,底層 C 代碼編譯的二進(jìn)制固件,包含操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)、基礎(chǔ)庫(kù),文件較大,更新頻率較低。

Script 部分:上層 Lua 應(yīng)用腳本,包含業(yè)務(wù)邏輯、基礎(chǔ)配置、應(yīng)用功能等,文件較小,更新頻率較高。。

在設(shè)備使用過(guò)程中,升級(jí)的時(shí)候通常會(huì)碰到三種情況,一種是單腳本需要升級(jí),一種是腳本 + 固件都需要升級(jí)。

在 4G 相關(guān)的模組中,比如 Air780Exx 系列、Air8000 系列模組中

單腳本升級(jí)時(shí)為全量升級(jí),含 core 升級(jí)時(shí)為差分升級(jí)。

在 wifi 模組 Air8101 和 Air8101A 中

單腳本升級(jí)和含 core 升級(jí)都為全量升級(jí)

4.2 單腳本升級(jí)

4.2.1 為什么腳本升級(jí)使用全量模式?

單腳本升級(jí)采用全量升級(jí)模式,原因有三:

大小因素:腳本文件本身就很小,一般幾十到幾百 KB,即使全量傳輸消耗的流量和帶寬也很有限,差分計(jì)算帶來(lái)的收益不明顯。

變更模式:腳本更新頻繁,且可能完全重寫邏輯,相鄰版本之間可能沒(méi)有明顯的"差異",而是完全不同的實(shí)現(xiàn),這種情況下差分效果差。

實(shí)現(xiàn)復(fù)雜度:全量升級(jí)實(shí)現(xiàn)簡(jiǎn)單,直接覆蓋文件即可,無(wú)需復(fù)雜的差分生成和合并算法,開發(fā)成本低。

4.2.2 單腳本升級(jí)升級(jí)包制作

在 luatools 中點(diǎn)擊生成量產(chǎn)文件,在生成的量產(chǎn)文件夾中,對(duì)應(yīng)的.bin 后綴的就是單腳本升級(jí)的升級(jí)包。

4.2.3 實(shí)際應(yīng)用場(chǎng)景

場(chǎng)景 1:快速迭代開發(fā)

在開發(fā)階段,業(yè)務(wù)邏輯頻繁調(diào)整,每次修改后直接全量更新腳本,簡(jiǎn)單快捷。

場(chǎng)景 2:配置文件更新

當(dāng)需要修改服務(wù)器地址、端口號(hào)、超時(shí)時(shí)間等配置參數(shù)時(shí),直接替換整個(gè)配置文件即可。

4.2.4 工作流程

開發(fā)者編寫新腳本 → 打包為升級(jí)文件 → 通過(guò) FOTA 平臺(tái)下發(fā) → 設(shè)備接收并覆蓋舊腳本 → 重啟后生效。

整個(gè)過(guò)程簡(jiǎn)單直接,適合高頻次的業(yè)務(wù)邏輯更新。

4.3 含 core 升級(jí)

4.3.1 為什么必須用差分升級(jí)?

含 core 升級(jí)必須使用差分模式,主要原因如下:

1、文件大小因素:Core 固件通常很大(512KB~2MB+),全量傳輸消耗大量流量和時(shí)間。差分可以顯著減少傳輸數(shù)據(jù)量,通常減少 90% 以上。

2、變更模式特點(diǎn):Core 固件更新頻率低,相鄰版本變化小,主要是 bug 修復(fù)和功能增強(qiáng),大部分代碼不變,適合差分算法。

3、技術(shù)必要性:嵌入式設(shè)備存儲(chǔ)空間有限,無(wú)法同時(shí)存儲(chǔ)兩個(gè)完整固件;fota 分區(qū)通常比較小。

4.3.2 含 core 升級(jí)升級(jí)包制作

對(duì)于含 core 升級(jí)的話需要制作差分包,原始版本生成一次量產(chǎn)文件,新版本生成一次量產(chǎn)文件。

針對(duì)這兩個(gè)量產(chǎn)文件,制作一個(gè)差分文件,點(diǎn)擊到 luatools 的主界面,依次點(diǎn)擊圖中藍(lán)框所示意的地方(注:必須使用 luatools_3.0.9 及其以上版本,要不差分包升級(jí)的時(shí)候可能會(huì)出問(wèn)題)

wKgZPGmC1sqAdc8XAADmKbPMHg4229.png

按下圖所示選擇低版本以及高版本的固件,然后點(diǎn)擊開始執(zhí)行即可,如果不想輸出的差分包在 luatools 根目錄下,可以自行選擇一個(gè)輸出路徑

wKgZO2mC1ueAMWvMAAET05Tjxk4520.png

在你選擇的目錄下看到如下所示,.bin 文件就是升級(jí)差分包。

wKgZPGmC1wWAetOKAAAscJy0qq0887.png

4.3.3 Core 固件的變更特點(diǎn)

Core 固件的更新通常是增量式的:修復(fù)一個(gè) bug、優(yōu)化某個(gè)驅(qū)動(dòng)、增加一個(gè)小功能。比如 V1.0.0 到 V1.0.1,可能只是修復(fù)了網(wǎng)絡(luò)連接中的一個(gè)空指針異常,99% 的代碼都沒(méi)有變化。這種場(chǎng)景下,差分升級(jí)只需傳輸那 1% 的變化部分,效率極高。

4.3.4 含 core 升級(jí)各芯片差異

4G 模組:

移芯系列模組:780Exx 系列、8000 系列等用移芯芯片的模組,含 core 升級(jí)為差分升級(jí),需要手動(dòng)差分

展銳系列模組:724UG 系列、722UG 系列、795UG 等用展銳芯片的模組,含 core 升級(jí)為差分升級(jí),不過(guò)如果使用的是我們 iot 平臺(tái)的話,可以上傳新版本的量產(chǎn)文件,差分過(guò)程可在服務(wù)器后臺(tái)自動(dòng)進(jìn)行,但是如果是第三方服務(wù)器升級(jí)需要手動(dòng)差分,把差分包上傳到自己服務(wù)器中。

特殊情況:wifi 模組 8101 和 8101A,由于芯片不支持差分升級(jí),單腳本升級(jí)或 core+ 腳本升級(jí)時(shí)都為全量升級(jí)。在 luatools 生成全量文件的時(shí)候,在指定目錄下會(huì)有兩個(gè)文件 full_fota 和 script_ota。full_fota 中為 core+ 腳本 升級(jí)的升級(jí)包,script_ota 中為單腳本的升級(jí)包。

wKgZO2mC11uALhTDAABJBDG5CcY209.png

4.4 升級(jí)類型對(duì) Flash 分區(qū)影響與二次開發(fā)關(guān)系總結(jié)

4.4.1 升級(jí)類型對(duì) Flash 分區(qū)的影響

wKgZO2mC2D6AN_uKAABvn3bycm8413.png


4.4.2 各分區(qū)與二次開發(fā)的關(guān)系

wKgZO2mC2E-AOXs8AADMffNk2AM195.png


4.4.3 升級(jí)包特點(diǎn)

單腳本升級(jí):文件小,更新頻繁,直接生成.bin 文件

含 core 升級(jí):文件大,更新頻率低,4G 模組需制作差分包,WiFi 模組為全量包

五、fota 升級(jí)相關(guān) api 簡(jiǎn)介(libfota2 擴(kuò)展庫(kù)和 fota 核心庫(kù))

在 luatos 中,升級(jí)一般是有兩組接口都能實(shí)現(xiàn) fota 功能,分別是 libfota2 擴(kuò)展庫(kù)和 fota 核心庫(kù)

5.1 libfota2 擴(kuò)展庫(kù)與 fota 核心庫(kù) 如何選擇

5.1.1 核心區(qū)別總結(jié)

fota(底層核心庫(kù))

定位: 基礎(chǔ)升級(jí),提供最核心的固件寫入能力

核心能力:

支持兩種寫入方式:fota.run() 分段寫入 和 fota.file() 文件直接升級(jí)

支持內(nèi)部存儲(chǔ)和外部 SPI Flash

提供完整的升級(jí)流程控制:init → run/file → isDone → finish

fota2(libfota2 擴(kuò)展庫(kù))

定位: 完整的遠(yuǎn)程升級(jí)解決方案,開箱即用

核心能力

自動(dòng)處理 HTTP/HTTPS 網(wǎng)絡(luò)下載

支持 IoT 平臺(tái)和自建服務(wù)器

內(nèi)置版本檢查、下載、驗(yàn)證全流程

提供詳細(xì)錯(cuò)誤碼和回調(diào)函數(shù)

代碼特點(diǎn):

wKgZO2mC2JOANpl0AACo3a6-1Zk187.png

5.1.2 適用場(chǎng)景推薦

1、選擇 fota 的情況

需要自定義升級(jí)數(shù)據(jù)源

通過(guò)串口接收升級(jí)包

通過(guò) MQTT、TCP 等自定義協(xié)議傳輸

從 SD 卡、U 盤等外部存儲(chǔ)讀取

對(duì)升級(jí)流程有特殊控制需求:

需要在升級(jí)前后執(zhí)行特定操作

需要精細(xì)控制數(shù)據(jù)寫入時(shí)機(jī)

需要自定義進(jìn)度監(jiān)控邏輯

資源極度受限環(huán)境

設(shè)備存儲(chǔ)空間極小,內(nèi)存緊張,無(wú)法加載額外庫(kù)

開發(fā)測(cè)試階段

需要調(diào)試升級(jí)過(guò)程的每個(gè)環(huán)節(jié)

需要驗(yàn)證自定義升級(jí)方案

2、選擇 libfota2 的情況

標(biāo)準(zhǔn)的 HTTP 遠(yuǎn)程升級(jí)

從服務(wù)器下載升級(jí)包

使用 IoT 平臺(tái)服務(wù)

需要 HTTPS 安全下載

希望快速實(shí)現(xiàn)升級(jí)功能

不想處理網(wǎng)絡(luò)下載細(xì)節(jié)

需要自動(dòng)版本檢查

希望簡(jiǎn)單的錯(cuò)誤處理

生產(chǎn)環(huán)境部署

需要穩(wěn)定的遠(yuǎn)程升級(jí)方案

需要詳細(xì)的升級(jí)狀態(tài)反饋

支持定時(shí)自動(dòng)檢查更新

5.1.3 實(shí)際選擇建議

新手用戶 → 直接選擇 libfota2

接口簡(jiǎn)單,學(xué)習(xí)成本低

內(nèi)置完整錯(cuò)誤處理

適合大多數(shù)物聯(lián)網(wǎng)應(yīng)用場(chǎng)景

高級(jí)用戶 → 根據(jù)需求選擇

標(biāo)準(zhǔn)網(wǎng)絡(luò)升級(jí) → libfota2

自定義數(shù)據(jù)傳輸 → fota + 自定義邏輯

一句話總結(jié):

libfota2 擴(kuò)展庫(kù):適合絕大多數(shù)標(biāo)準(zhǔn)遠(yuǎn)程升級(jí)場(chǎng)景。你只要給它一個(gè)服務(wù)器地址(合宙 iot 平臺(tái)甚至不用給),它自己就幫你完成版本檢查、HTTP 下載、校驗(yàn)所有流程。一行代碼 libfota2.request(cb) 就能發(fā)起升級(jí),省心省力。

fota 核心庫(kù):給你最大的控制權(quán)。適合非標(biāo)準(zhǔn)升級(jí)渠道,比如通過(guò)串口、MQTT、TCP 自定義協(xié)議,或者從 SD 卡、U 盤讀取升級(jí)包。你需要自己控制數(shù)據(jù)流的接收和寫入過(guò)程。


5.2 libfota2 擴(kuò)展庫(kù) api 介紹

5.2.1 libfota2.request(cbFnc, opts)

功能

發(fā)起遠(yuǎn)程升級(jí)

libfota2.request 是 LuatOS 為物聯(lián)網(wǎng)設(shè)備提供的一個(gè)強(qiáng)大、靈活且安全的遠(yuǎn)程固件升級(jí)接口,它能極大簡(jiǎn)化通過(guò)平臺(tái)或私有服務(wù)器實(shí)現(xiàn)設(shè)備 FOTA 功能的開發(fā)流程。

參數(shù)

cbFnc

wKgZO2mC2liAWm6-AAROfbe-6r0655.png

opts

wKgZO2mC2uGASXMdABSqy38IduI118.png


返回值

無(wú)

示例

本示例章節(jié)僅列舉一些常用功能的核心代碼片段

wKgZO2mC2xmAOp6jAAPQqxt4aHc161.png

5.3 fota 核心庫(kù) api 介紹

5.3.1 fota.init()

功能

初始化 fota 流程。

參數(shù)

無(wú)

返回值

local result = fota.init()

result

wKgZO2mC20KAXnL_AABwlfL6J9w974.png

例子

wKgZO2mC3AKAb8eHAACOen8GPco306.png


5.3.2 fota.wait()

功能

等待底層 fota 流程準(zhǔn)備好,等待底層固件升級(jí)流程初始化完成,包括存儲(chǔ)設(shè)備就緒、升級(jí)上下文準(zhǔn)備等。

參數(shù)

無(wú)

返回值

local isDone = fota.wait()

isDone

wKgZO2mC3CyAdY53AABq_AXWY04127.png


例子

wKgZO2mC3EaAIT7UAACatLErwdI415.png

5.3.3 fota.run(buff, offset, len)

功能

寫入 fota 數(shù)據(jù),支持逐段寫入升級(jí)包。

注意事項(xiàng):如果傳入的是 zbuff,寫入成功后,請(qǐng)自行清空 zbuff 內(nèi)的數(shù)據(jù)

參數(shù)

buff

wKgZO2mC3HCAQUzUAACFH466OqI143.png


offset

wKgZPGmC3IuATVLpAACPjLrfLRo368.png

len

wKgZO2mC3L-AFwvQAACWiXnvxyk444.png

返回值

local result, isDone, cache = fota.run(buff, offset, len)

result

wKgZPGmC3OCAO6JVAABtVwLRu7Y986.png

isDone

wKgZPGmC3SeAWDY-AABwb3GcUrM318.png

cache

wKgZO2mC3T6Ae5IvAACGNyehbSY039.png


例子

wKgZO2mC3VyAULzzAAJIEQwu2Mk608.png

5.3.4 fota.file(path)

功能

從指定文件讀取 fota 數(shù)據(jù)并寫入

參數(shù)

path

wKgZPGmC3eiAR2ZrAAB3_69p4I8931.png


返回值

local result, isDone, cache = fota.file("/xxx.bin")

result

wKgZPGmC3gaAeIprAABuk7wx5Ec125.png


isDone

wKgZO2mC3iOAWNddAABuH3ucTZI350.png

cache

wKgZO2mC3T6Ae5IvAACGNyehbSY039.png


例子

wKgZO2mC3mKAApbbAAUToIxV9-Y056.png

5.3.5 fota.isDone()

功能

等待底層 fota 流程完成

參數(shù)

無(wú)

返回值

local result, isDone = fota.isDone()

result

wKgZO2mC3uyAGV1cAABlR1zhQng323.png

isDone

wKgZO2mC3yaAM45cAABsaXhmBHM476.png


例子

wKgZPGmC3zuAe3X2AADA6y8K08U633.png


5.3.6 fota.finish(is_ok)

功能

結(jié)束 fota 流程

參數(shù)

is_ok

wKgZPGmC31-AQ-d7AAEGpzTXssM826.png


返回值

local result = fota.finish(is_ok)

result

wKgZO2mC33mAWT68AABoaJSbaSM811.png


例子

wKgZO2mC34yAXzd5AAF6ThLu5O8790.png

六、LuatOS 上 FOTA 功能實(shí)際應(yīng)用示例

本部分將深入兩項(xiàng)具體實(shí)踐:使用 FOTA 核心庫(kù)進(jìn)行固件升級(jí)和使用 libfota2 擴(kuò)展庫(kù)進(jìn)行固件升級(jí)。

6.1 使用 FOTA 核心庫(kù)的固件升級(jí)

6.1.1 分析項(xiàng)目代碼

1、文件說(shuō)明

main.lua:主程序入口文件。

fota_file.lua:文件系統(tǒng) FOTA 升級(jí)功能實(shí)現(xiàn),從文件系統(tǒng)直接讀取升級(jí)包進(jìn)行固件升級(jí)。

fota_uart.lua:串口分段升級(jí)功能實(shí)現(xiàn),通過(guò)串口接收升級(jí)包數(shù)據(jù)進(jìn)行固件升級(jí)。

2、演示功能

文件系統(tǒng)直接升級(jí):

通過(guò)模組文件系統(tǒng)中的文件直接升級(jí)

代碼演示通過(guò) luatools 的燒錄文件系統(tǒng)功能將升級(jí)包文件直接燒錄到文件系統(tǒng)然后升級(jí)

適用于本地升級(jí)、批量生產(chǎn)等場(chǎng)景

串口分段升級(jí):

通過(guò)串口將升級(jí)包文件分多個(gè)片段發(fā)送,每個(gè)片段接收并寫入

代碼演示使用 USB 虛擬串口分段寫入升級(jí)包升級(jí)

適用于非標(biāo)準(zhǔn)數(shù)據(jù)傳輸(串口、TCP、MQTT 等自定義通道升級(jí))

支持流程精細(xì)控制,可自定義升級(jí)前后處理邏輯

3、注意事項(xiàng):

升級(jí)包必須是針對(duì)當(dāng)前硬件平臺(tái)的正確固件

升級(jí)過(guò)程中請(qǐng)勿斷電或中斷升級(jí)流程

串口升級(jí)時(shí),需確保串口連接穩(wěn)定

升級(jí)成功后,設(shè)備會(huì)自動(dòng)重啟,無(wú)需手動(dòng)操作。

升級(jí)失敗時(shí),可通過(guò)日志查看具體錯(cuò)誤信息

6.2 使用 libfota2 擴(kuò)展庫(kù)的固件升級(jí)

6.2.1 分析項(xiàng)目代碼

1、目錄結(jié)構(gòu)

wKgZPGmC4TSAEo5IAAKgHS1jcuY810.png

2、文件說(shuō)明

iot_server 目錄

main.lua :主程序入口,

update.lua :使用合宙 IoT 服務(wù)器簡(jiǎn)單遠(yuǎn)程升級(jí)模塊。

air_srv_fota.lua :使用合宙 IoT 平臺(tái)遠(yuǎn)程通過(guò) tcp 下發(fā)指令控制升級(jí)功能模塊。

netdrv_device.lua :網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備配置,支持 4G、WIFI、以太網(wǎng)等多種網(wǎng)絡(luò)連接方式

psm_power_fota.lua :PSM 低功耗模式下的 FOTA 升級(jí)實(shí)現(xiàn),解決 PSM 狀態(tài)下升級(jí)中斷問(wèn)題 TCP 客戶端 IoT 模塊

tcp_iot/tcp_iot_main.lua :TCP 客戶端主應(yīng)用,處理 TCP 連接和升級(jí)指令接收

tcp_iot/tcp_iot_sender.lua :TCP 數(shù)據(jù)發(fā)送功能,負(fù)責(zé)向服務(wù)器發(fā)送設(shè)備狀態(tài)和升級(jí)反饋

tcp_iot/tcp_iot_receiver.lua :TCP 數(shù)據(jù)接收功能,解析服務(wù)器下發(fā)的升級(jí)指令 網(wǎng)絡(luò)驅(qū)動(dòng)

netdrv/netdrv_4g.lua :4G 網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn),負(fù)責(zé) 4G 網(wǎng)絡(luò)連接管理

netdrv/netdrv_eth_spi.lua :SPI 外掛 CH390H 芯片的以太網(wǎng)卡驅(qū)動(dòng)

netdrv/netdrv_multiple.lua :多網(wǎng)卡優(yōu)先級(jí)管理,支持配置多種網(wǎng)卡的連接優(yōu)先級(jí)

self_server 目錄

main.lua :主程序入口。

update.lua :自定義服務(wù)器遠(yuǎn)程簡(jiǎn)單升級(jí)功能模塊。

customer_srv_fota.lua :自定義服務(wù)器通過(guò) tcp 下發(fā)指令控制升級(jí)功能模塊。

psm_power_fota.lua :PSM 低功耗模式下的 FOTA 升級(jí)實(shí)現(xiàn),解決低功耗場(chǎng)景下的升級(jí)問(wèn)題

netdrv_device.lua :網(wǎng)絡(luò)驅(qū)動(dòng)設(shè)備配置,支持多種網(wǎng)絡(luò)連接方式 TCP 自定義服務(wù)器模塊

tcp_self_server/tcp_self_main.lua :TCP 客戶端主應(yīng)用,處理 TCP 連接和升級(jí)指令接收

tcp_self_server/tcp_self_sender.lua :TCP 數(shù)據(jù)發(fā)送功能,負(fù)責(zé)向服務(wù)器發(fā)送設(shè)備狀態(tài)和升級(jí)反饋

tcp_self_server/tcp_self_receiver.lua :TCP 數(shù)據(jù)接收功能,解析服務(wù)器下發(fā)的升級(jí)指令 網(wǎng)絡(luò)驅(qū)動(dòng)

netdrv/netdrv_4g.lua :4G 網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)

netdrv/netdrv_eth_spi.lua :SPI 以太網(wǎng)卡驅(qū)動(dòng)

netdrv/netdrv_multiple.lua :多網(wǎng)卡優(yōu)先級(jí)管理

3、演示功能

場(chǎng)景一: IoT 服務(wù)器簡(jiǎn)單升級(jí)

使用 iot.openluat.com 服務(wù)器進(jìn)行遠(yuǎn)程升級(jí)

上電就檢查升級(jí),支持版本號(hào)自動(dòng)檢測(cè)和升級(jí)包下載

適用于快速部署和管理大量設(shè)備

場(chǎng)景二:TCP 服務(wù)器下發(fā)升級(jí)指令

通過(guò) TCP 服務(wù)器下發(fā) JSON 格式升級(jí)指令

通控制設(shè)備使用 FOTA 功能模塊

場(chǎng)景三:PSM 低功耗 FOTA

針對(duì) PSM 狀態(tài)下升級(jí)未完成就進(jìn)入休眠導(dǎo)致升級(jí)失敗的情況

支持低功耗設(shè)備的可靠升級(jí)

4、注意事項(xiàng)

進(jìn)行遠(yuǎn)程升級(jí)時(shí),版本號(hào)必須按照"XXX.YYY.ZZZ"三段格式定義

不同場(chǎng)景的功能模塊不要同時(shí)加載,否則會(huì)導(dǎo)致功能沖突

升級(jí)過(guò)程中需保持網(wǎng)絡(luò)連接穩(wěn)定

建議在升級(jí)前檢查設(shè)備電量,確保有足夠電量完成升級(jí)。

6.3 Air780EHM 開發(fā)板上演示項(xiàng)目功能

準(zhǔn)備硬件環(huán)境

Air780EHM 開發(fā)板一塊

TYPE-C USB 數(shù)據(jù)線一根

可聯(lián)網(wǎng)的 SIM 卡(用于遠(yuǎn)程升級(jí)場(chǎng)景)

ttl 小板(可選,用于物理串口升級(jí))

準(zhǔn)備軟件環(huán)境

Luatools燒錄工具

內(nèi)核固件

腳本文件:對(duì)應(yīng)場(chǎng)景的腳本文件

模擬工具

串口升級(jí):Python 環(huán)境和 main.py 腳本

遠(yuǎn)程升級(jí)

演示流程

文件系統(tǒng)升級(jí)演示

使用 Luatools 燒錄升級(jí)包到文件系統(tǒng)

燒錄 fota_file.lua 相關(guān)腳本

觀察日志輸出,驗(yàn)證升級(jí)是否成功

串口升級(jí)演示

燒錄 fota_uart.lua 相關(guān)腳本

按下 Power 鍵啟動(dòng)升級(jí)模式

運(yùn)行 Python 腳本發(fā)送升級(jí)包

觀察串口輸出和升級(jí)進(jìn)度

遠(yuǎn)程升級(jí)演示

在 IoT 平臺(tái)創(chuàng)建設(shè)備和升級(jí)任務(wù)

燒錄對(duì)應(yīng)場(chǎng)景的腳本

設(shè)備自動(dòng)連接平臺(tái)并檢測(cè)升級(jí)

觀察升級(jí)進(jìn)度和結(jié)果

6.4 升級(jí)擴(kuò)展

支持藍(lán)牙功能的模塊比如 Air8000A 或者 Air8101 等模組,可以通過(guò)藍(lán)牙升級(jí),具體升級(jí)可參考對(duì)應(yīng)教程文檔。

七、注意事項(xiàng)與常見問(wèn)題

7.1 注意事項(xiàng)

1、版本號(hào)格式:

使用 IoT 平臺(tái)時(shí),項(xiàng)目的 VERSION 必須為三段數(shù)字格式(如 "001.000.001"),否則平臺(tái)版本比對(duì)可能出錯(cuò)。

2、PRODUCT_KEY:

使用 IoT 平臺(tái)時(shí),必須在 main.lua 中正確定義全局變量 PRODUCT_KEY,其值需從 IoT 平臺(tái)的項(xiàng)目中獲取。

3、重啟時(shí)機(jī):

下載升級(jí)包成功(result 為 0)后,通常需要調(diào)用 rtos.reboot() 重啟設(shè)備以更新。你可以根據(jù)需要延遲重啟。

4、自建服務(wù)器規(guī)則:

使用 libfota2 擴(kuò)展庫(kù)的時(shí)候,填寫自建服務(wù)器 url 時(shí)候記得 url 前面拼上###

需要升級(jí)時(shí),服務(wù)器應(yīng)返回 HTTP 200,消息體為升級(jí)文件內(nèi)容。

無(wú)需升級(jí)時(shí),服務(wù)器應(yīng)返回 HTTP 300 或以上的狀態(tài)碼。

5、使用 iot 平臺(tái)需要注意:

設(shè)備在自己名下;

代碼中項(xiàng)目 key(PRODUCT_KEY)要填寫正確;

配置好升級(jí)包文件后需要指定升級(jí)設(shè)備,配置需要升級(jí)設(shè)備的 imei;

升級(jí)失敗可以在 iot 平臺(tái)中打開固件升級(jí)->升級(jí)日志頁(yè)面,輸入 iemi 來(lái)查看下升級(jí)失敗的原因是什么。

wKgZPGmC49aAUhL2AANkSEvzm2k083.png

7.2 為什么升級(jí)后我的模塊沒(méi)有任何反應(yīng)了,像是變磚一樣

有多種可能,

7.2.1 檢查腳本

首先先檢查下用戶自己的腳本,有可能是引起重啟/死機(jī)的代碼寫在了最前面,例如新加的某個(gè)值或者函數(shù)為 nil 但是還是去做了些加減乘除或者判斷大小的邏輯。可以直接本地?zé)浵滦掳姹镜?core+ 腳本驗(yàn)證,如果有 fskv 等用到 flash 的代碼,可能需要仔細(xì)檢查才能排除問(wèn)題,比如下載的時(shí)候勾選如下圖所示的兩個(gè)選項(xiàng)。

7.2.2 檢查 core

如果是僅腳本升級(jí),但是沒(méi)注意使用了新 core 中才有的接口,就有可能引起循環(huán)重啟,如果重啟在代碼最開頭,模塊可能來(lái)不及打印任何日志就重啟了,可以直接本地?zé)浵滦掳姹镜?core+ 腳本驗(yàn)證,如果有 fskv 等用到 flash 的代碼,可能需要仔細(xì)檢查。

7.3 檢查過(guò)腳本和 core,沒(méi)問(wèn)題,為什么會(huì)循環(huán)升級(jí) 6 次以后禁止升級(jí)

檢查下升級(jí)包是否正常,有時(shí)候因?yàn)槿藛T誤操作,經(jīng)常會(huì)出現(xiàn)舊腳本 + 新 core 或者新腳本 + 舊 core 的意外組合,

例如:

本來(lái)應(yīng)該如下表描述的一樣

wKgZO2mC5QSAdd0OAAAaUAjniWM290.png

操作人員失誤后變成了如下

wKgZO2mC5RWAVDEmAAA69ik3u8g389.png

然后誤操作舊版本(1) 和誤操作新版本(1)進(jìn)行差分,這樣雖然腳本版本號(hào)舊版本大于了新版本,但是 core 的舊版本小于新版本,所以升級(jí)平臺(tái)依舊認(rèn)為是依次有效的升級(jí),下發(fā)了升級(jí)包。

升級(jí)完成后,模塊內(nèi)部腳本版本號(hào)變成了 001.000.000 core 版本號(hào)為 V2004 ,下次模塊請(qǐng)求升級(jí)的時(shí)候,當(dāng)前固件上報(bào)的腳本版本號(hào)(001.000.000)依舊小于云平臺(tái)存儲(chǔ)的腳本版本號(hào)(001.000.005),然后繼續(xù)下發(fā)升級(jí)包,就這么循環(huán)升級(jí),直到流量耗盡,建議可以做一個(gè)類似 iot 平臺(tái)的禁止升級(jí)規(guī)則

wKgZO2mC5SyAF_N6AAEXlIhz66A670.png

在正確生成差分包,并且上傳成功后,可以在 iot 平臺(tái)里解除禁止升級(jí)的限制

在"我的設(shè)備"中選擇升級(jí) imei 所在的項(xiàng)目,然后點(diǎn)擊右邊的"解除禁止升級(jí)",

wKgZPGmC5UKAL7_LAAFNWHKofqA224.png

確定“導(dǎo)致設(shè)備循環(huán)升級(jí)的異常”已經(jīng)處理完成后,點(diǎn)擊確定解除,即可解除限制升級(jí)

wKgZPGmC5WaAAeDOAAFr5-HIKFY019.png

7.4 如何處理同個(gè)項(xiàng)目外面有多個(gè)版本設(shè)備的升級(jí)情況

7.4.1 場(chǎng)景 1:多種不同內(nèi)核固件版本都要升級(jí)為最新版本內(nèi)核固件 + 最新腳本

需要對(duì)每個(gè)版本都生成對(duì)應(yīng)的差分包

操作步驟:

7.4.2 場(chǎng)景 2:多種不同內(nèi)核固件版本 + 不同版本腳本都要升級(jí)為最新版本腳本,既只升級(jí)腳本。

操作步驟:

7.4.3 升級(jí)規(guī)則說(shuō)明

內(nèi)核固件:需分情況對(duì)待,4G 模組系列比如 Air780EXX 系列、Air724UG、Air8000 系列等僅支持差分升級(jí),wifi 模組 Air8101/Air8101A 是全量升級(jí)

腳本:支持全量升級(jí),可一次性完成

7.5 fota 升級(jí)對(duì) fskv 或文件系統(tǒng)的影響

7.5.1 遠(yuǎn)程升級(jí)時(shí),會(huì)清除 FSKV 中的數(shù)據(jù)嗎?

默認(rèn)不會(huì),F(xiàn)SKV 數(shù)據(jù)存儲(chǔ)在獨(dú)立分區(qū),遠(yuǎn)程升級(jí)主要操作 FOTA 專用分區(qū)、ap/cp 分區(qū)、用戶腳本分區(qū),不會(huì)直接修改 FSKV 分區(qū)。

7.5.2 遠(yuǎn)程升級(jí)時(shí),自己創(chuàng)建的文件會(huì)被刪除嗎?

不會(huì),用戶文件系統(tǒng)中自行創(chuàng)建的文件會(huì)保留,不會(huì)影響用戶文件。

八、fota 錯(cuò)誤總結(jié)

8.1 差分包過(guò)大

wKgZPGmC5kSAAhW2AAKHaIIWB04929.png


8.2 iot 平臺(tái)升級(jí)沒(méi)有配置 imei

wKgZPGmC5mWAU-KiAAS9Pikv15c614.pngwKgZPGmC5oGAQjYPAAGNp8b3xS0733.png


8.3 制作差分包時(shí)的舊固件不是模組中實(shí)際的固件

下面例子模組中實(shí)際固件是 2016_2 號(hào)固件

制作差分時(shí)用的 2020_1 號(hào)固件對(duì) 2016_1 號(hào)固件制作的差分包

wKgZO2mC5qGAaWNVAARU7eLXN9o810.pngwKgZPGmC5sqARHKuAAQySFnanJs578.png

平臺(tái)校驗(yàn)版本通過(guò),正常下發(fā)升級(jí)包

wKgZPGmC5t-ABM1yAAG_dQrzfSc749.png

8.4 不同編號(hào)固件制作差分包

不同編號(hào)的固件制作差分包的時(shí)候通常制作的差分包過(guò)大,升級(jí)失敗,日志見 8.1

wKgZPGmC5vyAP9vbAAE1FCPwbT0788.png

問(wèn)題將會(huì)持續(xù)更新......

今天的內(nèi)容就分享到這里了~


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FOTA
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    8175
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    156

    瀏覽量

    2695
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LuatOS FOTA升級(jí):新手也能秒懂的操作指南

    面對(duì)成千上萬(wàn)的終端設(shè)備,如何低成本完成版本迭代?FOTA是答案。本文聚焦LuatOS平臺(tái)的遠(yuǎn)程升級(jí)能力,以極簡(jiǎn)語(yǔ)言和清晰步驟,帶你走過(guò)從創(chuàng)建項(xiàng)目、獲取校驗(yàn)碼到設(shè)備重啟升級(jí)的全過(guò)程,真正
    的頭像 發(fā)表于 02-04 15:34 ?838次閱讀
    <b class='flag-5'>LuatOS</b> <b class='flag-5'>FOTA</b><b class='flag-5'>升級(jí)</b>:新手也能秒懂的操作指南

    基于LuatOS的MQTT物聯(lián)網(wǎng)通信

    在構(gòu)建物聯(lián)網(wǎng)終端設(shè)備時(shí),通信協(xié)議的選擇直接決定系統(tǒng)的穩(wěn)定性與擴(kuò)展性。LuatOS通過(guò)內(nèi)置MQTT客戶端支持,使開發(fā)者能以極少代碼實(shí)現(xiàn)設(shè)備上云。本文將從協(xié)議原理到代碼實(shí)現(xiàn),全面解析基于LuatOS
    的頭像 發(fā)表于 01-29 19:42 ?174次閱讀
    基于<b class='flag-5'>LuatOS</b>的MQTT物聯(lián)網(wǎng)通信<b class='flag-5'>全</b>解

    輕松掌握——LuatOS socket基礎(chǔ)知識(shí)和應(yīng)用開發(fā)

    對(duì)于剛接觸LuatOS開發(fā)的工程師而言,實(shí)現(xiàn)設(shè)備聯(lián)網(wǎng)往往是第一個(gè)重要目標(biāo),而Socket編程正是實(shí)現(xiàn)這一目標(biāo)的核心技術(shù)路徑。本文以循序漸進(jìn)的方式,帶領(lǐng)讀者從最基礎(chǔ)的Socket概念入手,逐步掌握在
    的頭像 發(fā)表于 01-28 20:07 ?172次閱讀
    輕松掌握——<b class='flag-5'>LuatOS</b>  socket基礎(chǔ)知識(shí)和應(yīng)用開發(fā)

    LuatOS框架的使用(上)

    環(huán)境搭建、模塊調(diào)用到任務(wù)調(diào)度,全面解析其開發(fā)流程與最佳實(shí)踐。 本篇文章主要講LuatOS 框架;LuatOS 框架是整個(gè) LuatOS 開發(fā)中最基礎(chǔ)也是最核心的內(nèi)容,無(wú)論使用
    的頭像 發(fā)表于 01-27 19:38 ?156次閱讀
    <b class='flag-5'>LuatOS</b>框架的使用(上)

    零基礎(chǔ)入門:用libfota2實(shí)現(xiàn)第三方服務(wù)器FOTA升級(jí)服務(wù)

    ?即使你是FOTA新手,也能通過(guò)本教程掌握遠(yuǎn)程固件升級(jí)的核心實(shí)現(xiàn)。我們以libfota2為客戶端核心,結(jié)合自建第三方服務(wù)器,提供一份零基礎(chǔ)可上手的完整FOTA服務(wù)搭建指南。從服務(wù)端部署到設(shè)備端響應(yīng)
    的頭像 發(fā)表于 01-19 18:35 ?100次閱讀
    零基礎(chǔ)入門:用libfota2實(shí)現(xiàn)第三方服務(wù)器<b class='flag-5'>FOTA</b><b class='flag-5'>升級(jí)</b>服務(wù)

    FOTA升級(jí)流程教學(xué):基于libfota2與第三方服務(wù)器搭建

    遠(yuǎn)程固件升級(jí)不再是大廠專屬,借助libfota2,你也可以為自己的設(shè)備搭建私有FOTA系統(tǒng)。本文將“手把手”帶你完成從服務(wù)端搭建、固件包發(fā)布到設(shè)備端升級(jí)響應(yīng)的完整流程。所有環(huán)節(jié)均基于第三方服務(wù)器實(shí)現(xiàn)
    的頭像 發(fā)表于 01-19 18:35 ?218次閱讀
    <b class='flag-5'>FOTA</b><b class='flag-5'>升級(jí)</b><b class='flag-5'>全</b>流程教學(xué):基于libfota2與第三方服務(wù)器搭建

    LuatOS-Air轉(zhuǎn)LuatOS常見故障排查手冊(cè)

    當(dāng)LuatOS-Air腳本在LuatOS環(huán)境中運(yùn)行失敗,問(wèn)題往往集中在幾個(gè)關(guān)鍵模塊:任務(wù)調(diào)度、外設(shè)驅(qū)動(dòng)、網(wǎng)絡(luò)配置和固件版本匹配。本文以故障排查的邏輯為主線,列出常見報(bào)錯(cuò)現(xiàn)象、可能原因及快速修復(fù)
    的頭像 發(fā)表于 01-13 19:20 ?134次閱讀
    <b class='flag-5'>LuatOS</b>-Air轉(zhuǎn)<b class='flag-5'>LuatOS</b>常見故障排查手冊(cè)

    掌握LuatOS系統(tǒng)消息:新手也能看懂的列表詳解

    視角出發(fā),用通俗語(yǔ)言解析其工作原理與配置方法。此處列舉了LuatOS框架中自帶的系統(tǒng)消息列表。 ? 一、sys ? 文檔鏈接:https://docs.openluat.com/osapi/core
    的頭像 發(fā)表于 01-13 18:12 ?119次閱讀
    掌握<b class='flag-5'>LuatOS</b>系統(tǒng)消息:新手也能看懂的列表詳解

    Air8000-LuatOS exvib擴(kuò)展庫(kù)使用流程:實(shí)戰(zhàn)驅(qū)動(dòng)的操作解析

    在振動(dòng)傳感領(lǐng)域,Air8000-LuatOS的exvib擴(kuò)展庫(kù)具備顯著優(yōu)勢(shì)。本文以實(shí)戰(zhàn)驅(qū)動(dòng),詳細(xì)解析流程使用方法,包括環(huán)境配置、核心功能實(shí)現(xiàn)及數(shù)據(jù)驗(yàn)證,確保開發(fā)者能快速構(gòu)建穩(wěn)定可靠的解決方案
    的頭像 發(fā)表于 11-04 18:28 ?1138次閱讀
    Air8000-<b class='flag-5'>LuatOS</b> exvib擴(kuò)展庫(kù)使用<b class='flag-5'>全</b>流程:實(shí)戰(zhàn)驅(qū)動(dòng)的操作<b class='flag-5'>解析</b>

    LuatOS AGPS 輔助定位開發(fā)實(shí)戰(zhàn)教程

    為解決傳統(tǒng) GPS 定位慢、功耗高的痛點(diǎn),AGPS 技術(shù)通過(guò)輔助數(shù)據(jù)注入提升效率。本教程以 LuatOS 開發(fā)環(huán)境為基礎(chǔ),循序漸進(jìn)地講解 AGPS 輔助定位的開發(fā)流程,包括 AGPS 服務(wù)器對(duì)接
    的頭像 發(fā)表于 10-31 17:34 ?1186次閱讀
    <b class='flag-5'>LuatOS</b> AGPS 輔助定位開發(fā)實(shí)戰(zhàn)教程

    LuatOS腳本開發(fā)入門:嵌入式運(yùn)行框架解析

    想搞懂LuatOS如何運(yùn)行Lua腳本?本文深入剖析其嵌入式運(yùn)行框架,涵蓋虛擬機(jī)加載、任務(wù)協(xié)程、系統(tǒng)初始化等關(guān)鍵環(huán)節(jié),適合初學(xué)者。 一、LuatOS 編程起步 1.1 底層固件怎么啟動(dòng) LuatOS
    的頭像 發(fā)表于 09-26 17:45 ?477次閱讀
    <b class='flag-5'>LuatOS</b>腳本開發(fā)入門:嵌入式運(yùn)行框架<b class='flag-5'>全</b><b class='flag-5'>解析</b>!

    LuatOS短信功能解析:技術(shù)原理與運(yùn)行邏輯

    想要了解短信如何在LuatOS上高效運(yùn)行?本文將拆解其airsms.lua文件技術(shù)架構(gòu),從通信協(xié)議到代碼實(shí)現(xiàn),逐層揭示短信功能的完整運(yùn)作流程與核心邏輯。 ? 一、發(fā)送短信 LuatOS中已經(jīng)將短信
    的頭像 發(fā)表于 07-03 15:25 ?701次閱讀
    <b class='flag-5'>LuatOS</b>短信功能<b class='flag-5'>全</b><b class='flag-5'>解析</b>:技術(shù)原理與運(yùn)行邏輯

    棧開發(fā)進(jìn)階指南:LuatOS-log庫(kù)從入門到實(shí)戰(zhàn)!

    本文將帶你深入探索LuatOS系統(tǒng)中l(wèi)og庫(kù)的核心原理與實(shí)戰(zhàn)技巧,通過(guò)代碼示例解析日志管理、錯(cuò)誤追蹤及性能優(yōu)化的最佳實(shí)踐,助力棧工程師構(gòu)建更穩(wěn)健的物聯(lián)網(wǎng)應(yīng)用。 今天,我們一起來(lái)認(rèn)識(shí)LuatO
    的頭像 發(fā)表于 05-15 16:12 ?2858次閱讀
    <b class='flag-5'>全</b>棧開發(fā)進(jìn)階指南:<b class='flag-5'>LuatOS</b>-log庫(kù)從入門到實(shí)戰(zhàn)!

    解鎖LuatOS-log庫(kù):棧工程師的日志管理實(shí)戰(zhàn)課!

    針對(duì)棧開發(fā)者設(shè)計(jì)的實(shí)戰(zhàn)教程,本文聚焦LuatOS平臺(tái)log庫(kù)的高效使用,從基礎(chǔ)配置到高級(jí)調(diào)試策略,手把手教你搭建可擴(kuò)展的日志系統(tǒng),提升項(xiàng)目維護(hù)效率。 今天,我們一起來(lái)認(rèn)識(shí)LuatOS的log庫(kù)
    的頭像 發(fā)表于 05-12 15:23 ?1512次閱讀
    解鎖<b class='flag-5'>LuatOS</b>-log庫(kù):<b class='flag-5'>全</b>棧工程師的日志管理實(shí)戰(zhàn)課!

    FOTA遠(yuǎn)程升級(jí)的10個(gè)關(guān)鍵點(diǎn)!技術(shù)小白必須收藏

    本文將針對(duì)FOTA升級(jí)過(guò)程中的十大常見問(wèn)題提供專業(yè)解答,幫助您規(guī)避風(fēng)險(xiǎn),實(shí)現(xiàn)安全高效的固件更新。 一、FOTA遠(yuǎn)程升級(jí)常見問(wèn)題?? 01. 遠(yuǎn)程升級(jí)
    的頭像 發(fā)表于 04-10 14:53 ?683次閱讀
    <b class='flag-5'>FOTA</b>遠(yuǎn)程<b class='flag-5'>升級(jí)</b>的10個(gè)關(guān)鍵點(diǎn)!技術(shù)小白必須收藏