OTA介紹
OTA(Over-The-Air,空中升級)是一種通過無線通信技術(shù)實現(xiàn)遠(yuǎn)程更新設(shè)備固件或軟件的方法。設(shè)備批量投入使用后,由于部署范圍太廣、設(shè)備數(shù)量太多、部署的位置特殊、沒有預(yù)留硬件有線升級接口等原因,用戶往往無法人為的通過有線方式更新設(shè)備固件,這時候就可以通過 OTA 進行網(wǎng)絡(luò)升級。
UpdateEngine介紹
Firefly 在 Linux 平臺上提供了 UpdateEngine 開源 OTA 升級工具,工具支持遠(yuǎn)程下載固件、固件校驗、固件解包、完整固件/分區(qū)升級。
![4721104e-b718-11ef-8084-92fbcf53809c.png](https://file1.elecfans.com//web3/M00/01/D8/wKgZO2dY6xmAElk0AAPwWM0sv40811.png)
UpdateEngine工作原理
UpdateEngine 會解析 Rockchip 格式的固件,并且計算到每個分區(qū)鏡像在固件中的偏移。提取每個分區(qū)鏡像的末尾 crc 校驗信息,對固件和分區(qū)鏡像進行校驗,確保完整性。
UpdateEngine 會把固件存放的路徑(如:/userdata/update.img)和需要升級的分區(qū)信息寫入 misc 分區(qū),并且打上 ”update“標(biāo)志,讓設(shè)備在重啟后自動進入 recovery 模式。
在 recovery 模式中 userdata 分區(qū)會自動掛載到 /userdata 下,系統(tǒng)如果檢查到 “update”標(biāo)志,recovery 就會調(diào)用 rkupdate 對固件進行解析并且升級到存儲設(shè)備中。
設(shè)備在 recovery 模式時,根文件系統(tǒng)會運行在 ramdisk 內(nèi)存上,而不是原系統(tǒng)存儲上(如:emmc)。所以程序可以正常的向存儲設(shè)備分區(qū)進行寫操作。
OTA升級流程圖
![47406ed0-b718-11ef-8084-92fbcf53809c.png](https://file1.elecfans.com//web3/M00/01/D8/wKgZO2dY6xmAUt0QAAC2S9vALeE035.png)
OTA固件制作
“OTA 升級固件“”實際上就是 SDK 打包出來的 Rockchip 格式的固件。如果用戶只需要對某些分區(qū)進行升級而不是完整固件升級,可以通過修改 package-file 來裁剪固件大小。
位置在 Firefly_SDK/tools/linux/Linux_Pack_Firmware/rockdev/package-file
![475de802-b718-11ef-8084-92fbcf53809c.png](https://file1.elecfans.com//web3/M00/01/D8/wKgZO2dY6xmAcURtAAATjCxSTXk553.png)
“RESERVED”代表預(yù)留不打包的意思。例如:用戶如果只需要更新 kernel 、uboot、bootloader,可以把 rootfs 分區(qū)設(shè)置成“RESERVED”,這樣可以大大的減少固件大小。
OTA固件升級步驟
本文實例的實際操作軟硬件環(huán)境:
設(shè)備:AIO-3588Q
固件:AIO-3588Q-RTLINUX_Ubuntu20.04-Gnome-r240_v1.1.1d_231018
1. 安裝 UpdateEngine
在 Firefly官方的 ubuntu20.04 和 ubuntu22.04 apt源中已經(jīng)添加了 updateEngine 包,可以直接使用 apt 安裝。
apt updateapt install updateengine
如果是其他 Linux 發(fā)行版,也可以直接編譯運行。
apt install libdrm-dev libssl-dev libbz2-dev libcurl4-openssl-dev gitgit clone https://gitlab.com/firefly-linux/external/recovery.gitcd recoverymake -j8
2.升級遠(yuǎn)程固件
updateEngine --misc=update --image_url=http://172.16.0.123:8000/update.img --savepath=/userdata/update.img --partition=0xFFFC00 --reboot
--misc=update:misc 中寫入“update”標(biāo)志,通知 recovery 需要進行 OTA 升級
--image_url:指定固件路徑
--savepath:指定固件存放路徑
--partition:指定需要升級的分區(qū),不指定則默認(rèn)是 0X3FFC00
--reboot:執(zhí)行完成后是否自動 reboot
![476dc4b6-b718-11ef-8084-92fbcf53809c.png](https://file1.elecfans.com//web3/M00/01/D8/wKgZO2dY6xqAfDhFAAKXB0Q145A160.png)
簡單的搭建存放固件的 http 服務(wù)器。
python3 -m http.server 80
3. 升級本地固件
updateEngine --misc=update --image_url=/userdata/update.img --partition=0xFFFC00 --reboot
參數(shù)同上
4. 升級完成
執(zhí)行命令后會自動重啟進入 recovery 升級,user LED 燈閃爍,升級完成后設(shè)備會自動重啟進入正常的操作系統(tǒng)。
升級前:
升級后:
注意事項
1. 分區(qū)要求
如果你的設(shè)備只是單個系統(tǒng)啟動,不是 A/B 啟動,那么你的分區(qū)表中必須包含 misc 分區(qū)和 recovery 分區(qū)。另外如果固件存放在系統(tǒng)硬盤上的 userdata 分區(qū),那么不能修改分區(qū)表中的 Userdata 起始位置。
2. 固件存放
無論遠(yuǎn)程更新或本地更新,固件最終的存放路徑必須要放在 /userdata 下,有其他的存儲介質(zhì)除外,但也需要在 recovery 上可以做到自動掛載。
3.Userdata 用戶數(shù)據(jù)
Recovery 在 updateEning OTA 升級時會保留 userdata 數(shù)據(jù),所以 misc 不會升級,也不會擦除 userdata 分區(qū)數(shù)據(jù)。如有需要可以自定義 recovery 的代碼,F(xiàn)irefly_SDK/external/rkupdate/RKAndroidDevice.cpp => DownloadImage,去掉 MISC 的判斷條件,重新編譯 recovery 打包 OTA 升級固件。
更加安全的 OTA 升級應(yīng)該配合A/B 系統(tǒng)來完成,后續(xù)我們還會單獨介紹 A/B 系統(tǒng)的 OTA 升級。
-
無線通信
+關(guān)注
關(guān)注
58文章
4604瀏覽量
143882 -
數(shù)據(jù)線
+關(guān)注
關(guān)注
8文章
289瀏覽量
37928 -
OTA
+關(guān)注
關(guān)注
7文章
587瀏覽量
35389
發(fā)布評論請先 登錄
相關(guān)推薦
OTA軟件升級管理系統(tǒng)
![<b class='flag-5'>OTA</b>軟件<b class='flag-5'>升級</b>管理系統(tǒng)](https://file1.elecfans.com/web3/M00/05/BE/wKgZO2eEbl2AHL9hAAA8BowkMfY184.png)
OTA無線更新技術(shù):一鍵升級系統(tǒng),隨時暢享FLIR最新技術(shù)!
![<b class='flag-5'>OTA</b>無線更新技術(shù):<b class='flag-5'>一</b>鍵<b class='flag-5'>升級</b>系統(tǒng),隨時暢享FLIR最新技術(shù)!](https://file1.elecfans.com//web3/M00/00/DF/wKgZPGdOtIGAAsACAADkopB1dDA315.png)
請教,SIM卡PCB走線,這個CKL時鐘線和數(shù)據(jù)線DATA要等長嘛,一條走頂層一條走底層如圖這樣可以嘛
S3N8R16工程代碼里面只要調(diào)用了wifi、藍(lán)牙、mqtt等相關(guān)接口,編譯出來的固件拿去ota升級就升級不了,為什么?
在增強模式下引導(dǎo)加載程序時,OTA升級失敗了,為什么?
OTA升級完成后,跳轉(zhuǎn)到新的固件時啟動失敗是怎么回事?
ESP8266 OTA升級不成功的原因?
esp32-s3 ota固件升級報錯怎么解決?
使用ESP32C3進行藍(lán)牙OTA升級,升級完成后提示沒有找到OTA數(shù)據(jù),為什么?
請問esp32 ota升級如何獲取更新進度?
ESP-IDF4.4 OTA升級失敗的原因?
ota固件升級成功后,重啟esp32-s3出現(xiàn)警告是怎么回事?
ZDP1440系列小技巧—如何OTA差分升級顯示素材?
![ZDP1440系列小技巧—如何<b class='flag-5'>OTA</b>差分<b class='flag-5'>升級</b>顯示素材?](https://file1.elecfans.com/web2/M00/E0/83/wKgZomY4coiAW8-QAAATZZPAWKQ490.png)
評論