91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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í):新手也能秒懂的操作指南

青山老竹農(nóng) ? 來源:jf_82863998 ? 作者:jf_82863998 ? 2026-02-04 15:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

面對(duì)成千上萬的終端設(shè)備,如何低成本完成版本迭代?FOTA是答案。本文聚焦LuatOS平臺(tái)的遠(yuǎn)程升級(jí)能力,以極簡(jiǎn)語言和清晰步驟,帶你走過從創(chuàng)建項(xiàng)目、獲取校驗(yàn)碼到設(shè)備重啟升級(jí)的全過程,真正實(shí)現(xiàn)“極速上手”。

一、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 為例,來詳細(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)單來說,固件實(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 訪問、可隨時(shí)創(chuàng)建和刪除的特性??梢杂脕韮?chǔ)存用戶配置文件、設(shè)備運(yùn)行日志、網(wǎng)絡(luò)配置信息、臨時(shí)數(shù)據(jù)和緩存、用戶生成的文件。

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

附加空間通常是去掉某些功能所節(jié)省出來的空間,所以有了不同編號(hào)的固件,來實(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ù)不丟失

高效訪問:支持快速的鍵值對(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)重要的安全限制,可以通過下面這個(gè)表格來了解:

wKgZPGmCwUmASo8kAAEIGbjeRlk858.png

通過上面表格可以看出,雖然兩個(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ū)的起始地址和大?。┦穷A(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í)包:

通過 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)通過,則在特定位置中設(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í) 若無升級(jí)標(biāo)志:Bootloader 跳過升級(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ū)),接下來一個(gè)很自然的問題是:我們要通過網(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ì)象:無論底層是移芯還是展銳芯片,最終都封裝成統(tǒng)一的.soc 格式,讓升級(jí)工具和流程得以標(biāo)準(zhǔn)化。

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

下面講解一下模組所用固件包.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)尚且無法支持這個(gè)格式。

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


LuatOS 將來會(huì)適配非常多的 SoC/MCU 芯片來設(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)編譯出來的固件,都是 binpkg 后綴結(jié)尾的固件,可以用移芯提供的 flashtool 工具燒錄,也可以用 Luatools 燒錄。

對(duì)于最終用戶和開發(fā)者而言,無論底層原始固件格式如何,均推薦使用 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)。接下來,我們逐個(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ú)更新腳本,無需重新下載完整固件。

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

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

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

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

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

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

一個(gè)生動(dòng)的比喻是:你手中有一本舊版的書籍,出版社發(fā)布了修訂版,但實(shí)際內(nèi)容只更改了其中的 30 頁(yè)。此時(shí),你無需購(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í)過程慢,影響用戶體驗(yàn)。

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

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

體積極?。翰罘职ǔH為完整新固件包的 10%-30%,甚至更低。

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

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

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

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

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

具體來說,在升級(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è)極小的差分包通過蜂窩網(wǎng)絡(luò)、以太網(wǎng)、藍(lán)牙、Wi-Fi 或本地串口等渠道,高效地下發(fā)到設(shè)備。

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

四、單腳本升級(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è)備使用過程中,升級(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ì)算帶來的收益不明顯。

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

實(shí)現(xiàn)復(fù)雜度:全量升級(jí)實(shí)現(xiàn)簡(jiǎn)單,直接覆蓋文件即可,無需復(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í)文件 → 通過 FOTA 平臺(tái)下發(fā) → 設(shè)備接收并覆蓋舊腳本 → 重啟后生效。

整個(gè)過程簡(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ǔ)空間有限,無法同時(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ì)出問題)

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% 的代碼都沒有變化。這種場(chǎng)景下,差分升級(jí)只需傳輸那 1% 的變化部分,效率極高。

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

4G 模組:

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

展銳系列模組:724UG 系列、722UG 系列、795UG 等用展銳芯片的模組,含 core 升級(jí)為差分升級(jí),不過如果使用的是我們 iot 平臺(tái)的話,可以上傳新版本的量產(chǎn)文件,差分過程可在服務(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ù)源

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

通過 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)存緊張,無法加載額外庫(kù)

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

需要調(diào)試升級(jí)過程的每個(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í)渠道,比如通過串口、MQTT、TCP 自定義協(xié)議,或者從 SD 卡、U 盤讀取升級(jí)包。你需要自己控制數(shù)據(jù)流的接收和寫入過程。


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)化通過平臺(tái)或私有服務(wù)器實(shí)現(xiàn)設(shè)備 FOTA 功能的開發(fā)流程。

參數(shù)

cbFnc

wKgZO2mC2liAWm6-AAROfbe-6r0655.png

opts

wKgZO2mC2uGASXMdABSqy38IduI118.png


返回值

示例

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

wKgZO2mC2xmAOp6jAAPQqxt4aHc161.png

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

5.3.1 fota.init()

功能

初始化 fota 流程。

參數(shù)

返回值

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ù)

返回值

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ù)

返回值

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、文件說明

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),通過串口接收升級(jí)包數(shù)據(jù)進(jìn)行固件升級(jí)。

2、演示功能

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

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

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

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

串口分段升級(jí):

通過串口將升級(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í)過程中請(qǐng)勿斷電或中斷升級(jí)流程

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

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

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

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

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

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

wKgZPGmC4TSAEo5IAAKgHS1jcuY810.png

2、文件說明

iot_server 目錄

main.lua :主程序入口,

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

air_srv_fota.lua :使用合宙 IoT 平臺(tái)遠(yuǎn)程通過 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í)中斷問題 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ù)器通過 tcp 下發(fā)指令控制升級(jí)功能模塊。

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

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í)指令

通過 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í)過程中需保持網(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 等模組,可以通過藍(lán)牙升級(jí),具體升級(jí)可參考對(duì)應(yīng)教程文檔。

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

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)容。

無需升級(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 來查看下升級(jí)失敗的原因是什么。

wKgZPGmC49aAUhL2AANkSEvzm2k083.png

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

有多種可能,

7.2.1 檢查腳本

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

7.2.2 檢查 core

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

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

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

例如:

本來應(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ī)則說明

內(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 差分包過大

wKgZPGmC5kSAAhW2AAKHaIIWB04929.png


8.2 iot 平臺(tái)升級(jí)沒有配置 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)版本通過,正常下發(fā)升級(jí)包

wKgZPGmC5t-ABM1yAAG_dQrzfSc749.png

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

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

wKgZPGmC5vyAP9vbAAE1FCPwbT0788.png

問題將會(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ī)問題,請(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í)全解析

    在實(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)
    的頭像 發(fā)表于 02-04 15:36 ?890次閱讀
    <b class='flag-5'>LuatOS</b> <b class='flag-5'>FOTA</b><b class='flag-5'>升級(jí)</b>全解析

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

    ?即使你是FOTA新手,通過本教程掌握遠(yuǎn)程固件升級(jí)的核心實(shí)現(xiàn)。我們以libfota2為客戶端核心,結(jié)合自建第三方服務(wù)器,提供一份零基礎(chǔ)可
    的頭像 發(fā)表于 01-19 18:35 ?99次閱讀
    零基礎(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é)均基于第
    的頭像 發(fā)表于 01-19 18:35 ?218次閱讀
    <b class='flag-5'>FOTA</b><b class='flag-5'>升級(jí)</b>全流程教學(xué):基于libfota2與第三方服務(wù)器搭建

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

    方案,打造一份實(shí)用的“不翻車”操作指南。 一、lua版本不一樣 LuatOS-Air使用的是lua5.1版本,本身不支持位移運(yùn)算符。 LuatOS使用的是lua5.3版本,取消了mod
    的頭像 發(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)消息:新手能看懂的列表詳解

    你是否在LuatOS開發(fā)中遇到過事件不響應(yīng)、回調(diào)未觸發(fā)的問題?這很可能與系統(tǒng)消息列表的配置或使用不當(dāng)有關(guān)。作為LuatOS事件驅(qū)動(dòng)模型的核心組件,消息列表管理著所有異步消息的排隊(duì)與分發(fā)。本文以新手
    的頭像 發(fā)表于 01-13 18:12 ?119次閱讀
    掌握<b class='flag-5'>LuatOS</b>系統(tǒng)消息:<b class='flag-5'>新手</b><b class='flag-5'>也</b>能看懂的列表詳解

    LuatOS MCU核心庫(kù)全接觸:新手操作與功能測(cè)試攻略!

    ?MCU芯片級(jí)開發(fā)新手如何快速掌握核心技能?本文圍繞LuatOS的MCU核心庫(kù),系統(tǒng)演示時(shí)鐘頻率獲取、唯一ID讀取、高精度計(jì)時(shí)、IO復(fù)用配置等核心功能測(cè)試,并通過豐富示例,幫助開發(fā)者輕松入門,迅速
    的頭像 發(fā)表于 11-12 14:30 ?292次閱讀
    <b class='flag-5'>LuatOS</b> MCU核心庫(kù)全接觸:<b class='flag-5'>新手</b><b class='flag-5'>操作</b>與功能測(cè)試攻略!

    新手必備:LuatOS MCU核心庫(kù)功能測(cè)試與實(shí)踐指南

    新手如何快速掌握MCU芯片級(jí)開發(fā)?本文通過LuatOS的MCU核心庫(kù),全面演示時(shí)鐘頻率獲取、唯一ID讀取、高精度計(jì)時(shí)、IO復(fù)用配置等核心功能的測(cè)試流程,并提供實(shí)用示例,幫助開發(fā)者高效入門,輕松應(yīng)對(duì)
    的頭像 發(fā)表于 11-12 14:26 ?337次閱讀
    <b class='flag-5'>新手</b>必備:<b class='flag-5'>LuatOS</b> MCU核心庫(kù)功能測(cè)試與實(shí)踐<b class='flag-5'>指南</b>

    USB設(shè)計(jì)操作指南:硬件關(guān)鍵與LuatOS API開發(fā)技巧!

    本文以Air780EPM系列低功耗模組為實(shí)例,分享USB接口硬件設(shè)計(jì)的要點(diǎn)以及LuatOS高效開發(fā)API的助力作用。旨在指導(dǎo)開發(fā)者在設(shè)計(jì)中規(guī)避常見陷阱,高效構(gòu)建穩(wěn)定可靠的USB應(yīng)用。 ? 在
    的頭像 發(fā)表于 11-11 18:29 ?263次閱讀
    USB設(shè)計(jì)<b class='flag-5'>操作</b><b class='flag-5'>指南</b>:硬件關(guān)鍵與<b class='flag-5'>LuatOS</b> API開發(fā)技巧!

    嵌入式入門必看!迅為RK3568?V2.0升級(jí),新手輕松玩轉(zhuǎn)

    嵌入式入門必看!迅為RK3568?V2.0升級(jí),新手輕松玩轉(zhuǎn)
    的頭像 發(fā)表于 10-28 13:26 ?433次閱讀
    嵌入式入門必看!迅為RK3568?V2.0<b class='flag-5'>升級(jí)</b>,<b class='flag-5'>新手</b><b class='flag-5'>也</b><b class='flag-5'>能</b>輕松玩轉(zhuǎn)

    零基礎(chǔ)能玩轉(zhuǎn)TCP/IP?LuatOS上手全攻略

    TCP/IP看似復(fù)雜,但借助LuatOS的簡(jiǎn)化開發(fā)模式,即使沒有網(wǎng)絡(luò)編程經(jīng)驗(yàn),能在短時(shí)間內(nèi)輕松實(shí)現(xiàn)通信功能。本指南將帶你一步步用LuatOS快速入門,真正實(shí)現(xiàn)“輕松搞定”。 提到網(wǎng)絡(luò)
    的頭像 發(fā)表于 10-15 17:28 ?540次閱讀
    零基礎(chǔ)<b class='flag-5'>也</b>能玩轉(zhuǎn)TCP/IP?<b class='flag-5'>LuatOS</b>上手全攻略

    快速掌握TCP/IP?LuatOS新手入門指南

    想快速上手TCP/IP通信卻不知從何開始?LuatOS為開發(fā)者提供了簡(jiǎn)潔高效的開發(fā)路徑。通過本指南的實(shí)操步驟,你將發(fā)現(xiàn),實(shí)現(xiàn)網(wǎng)絡(luò)連接其實(shí)比想象中更簡(jiǎn)單。 提到網(wǎng)絡(luò)應(yīng)用,就繞不開TCP/IP ——它不
    的頭像 發(fā)表于 10-15 17:27 ?664次閱讀
    快速掌握TCP/IP?<b class='flag-5'>LuatOS</b><b class='flag-5'>新手</b>入門<b class='flag-5'>指南</b>

    音響配件氣密性檢測(cè)儀操作指南,新手輕松上手-岳信儀器

    在音響生產(chǎn)與質(zhì)檢過程中,確保配件的氣密性是保障音質(zhì)穩(wěn)定、延長(zhǎng)產(chǎn)品壽命的關(guān)鍵環(huán)節(jié)。許多企業(yè)已逐步采用專業(yè)的音響配件氣密性檢測(cè)儀來替代傳統(tǒng)的泡水法或人工聽漏,但面對(duì)新設(shè)備,不少新手操作員仍感到無從下手
    的頭像 發(fā)表于 10-10 11:00 ?357次閱讀
    音響配件氣密性檢測(cè)儀<b class='flag-5'>操作</b><b class='flag-5'>指南</b>,<b class='flag-5'>新手</b><b class='flag-5'>也</b><b class='flag-5'>能</b>輕松上手-岳信儀器

    燒錄工具操作教程:新手快速掌握~

    燒錄工具看似復(fù)雜,其實(shí)操作很簡(jiǎn)單!現(xiàn)在就為你奉上清晰明了的使用說明,即使是新手迅速掌握。 本文就以 Air780EPM 開發(fā)板為例,演示燒錄工具的使用步驟。 ? 一、生成量產(chǎn)文件
    的頭像 發(fā)表于 09-26 19:20 ?926次閱讀
    燒錄工具<b class='flag-5'>操作</b>教程:<b class='flag-5'>新手</b><b class='flag-5'>也</b><b class='flag-5'>能</b>快速掌握~

    10分鐘上手寫代碼,LuatOS協(xié)程輕松掌握!

    10分鐘學(xué)會(huì)LuatOS協(xié)程,從此你的程序像通勤族利用碎片時(shí)間一樣游刃有余?,F(xiàn)在就去動(dòng)手試一試,開啟異步編程新體驗(yàn)! 寫給第一次聽說協(xié)程的你?: 別怕!協(xié)程不是復(fù)雜概念,看完這篇,10分鐘就能
    的頭像 發(fā)表于 04-10 15:18 ?661次閱讀
    10分鐘上手寫代碼,<b class='flag-5'>LuatOS</b>協(xié)程輕松掌握!

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

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