前言:
在嵌入式系統(tǒng)設(shè)備管理中,OTA(Over-The-Air)升級(jí)是實(shí)現(xiàn)設(shè)備遠(yuǎn)程維護(hù)、功能迭代的核心能力。本文基于 Ubuntu 系統(tǒng)環(huán)境,詳細(xì)拆解 updateEngine 工具的 OTA 升級(jí)方案,從配置開啟、命令使用到實(shí)戰(zhàn)案例與問題排查,為開發(fā)者提供一套可直接落地的操作指南
一、recovery配置updateEngine 支持
因OTA升級(jí)過程中需要進(jìn)入到recovery模式下進(jìn)行升級(jí),因此需要確保recovery文件系統(tǒng)中存在updateEngine指令。
要使用 updateEngine 進(jìn)行 OTA 升級(jí),需先通過編譯recovery配置開啟相關(guān)功能。針對(duì) Ubuntu 系統(tǒng),需在recovery配置文件中添加以下參數(shù):
BR2_PACKAGE_RECOVERY=y # 開啟升級(jí)核心功能BR2_PACKAGE_RECOVERY_USE_UPDATEENGINE=y # 啟用新升級(jí)程序,不配置則默認(rèn)使?原有升級(jí)流程BR2_PACKAGE_RECOVERY_UPDATEENGINEBIN=y # 編譯新升級(jí)程序文件BR2_PACKAGE_RECOVERY_NO_UI=y # 關(guān)閉UI界面
上述配置的核心是通過USE_UPDATEENGINE指定使用新升級(jí)框架,確保后續(xù)命令可調(diào)用updateEngine工具完成升級(jí)操作。
Ubuntu 的updateEngine 工具請(qǐng)通過拉取源碼進(jìn)行編譯生成。
二、updateEngine 命令詳解
updateEngine支持網(wǎng)絡(luò)遠(yuǎn)程升級(jí)與本地固件升級(jí),命令參數(shù)靈活且可按需組合,核心用法如下:
2.1網(wǎng)絡(luò)升級(jí):從遠(yuǎn)程服務(wù)器拉取固件
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --reboot &
--image_url:遠(yuǎn)程固件地址(HTTP/HTTPS 協(xié)議均可);
--misc=update:指定進(jìn)入升級(jí)模式;
--savepath:固件本地保存路徑(建議/userdata/update.img,與 recovery 模式默認(rèn)掛載路徑一致,避免檢索失?。?;
--reboot:升級(jí)后自動(dòng)重啟進(jìn)入 recovery 模式完成后續(xù)操作。
2.2本地升級(jí):使用已下載的本地固件
本地升級(jí)無需網(wǎng)絡(luò)傳輸,直接讀取--image_url指定的本地固件路徑,其他參數(shù)與網(wǎng)絡(luò)升級(jí)一致。
2.3可缺省參數(shù)說明
--version_url:版本文件地址(遠(yuǎn)程 / 本地均可),用于升級(jí)前與/etc/version中的RK_VERSION比對(duì),缺省時(shí)不進(jìn)行版本校驗(yàn);
--partition:指定升級(jí)分區(qū)(默認(rèn)0x3FFC00),不?持升級(jí)parameter 和loader分區(qū)
--savepath:缺省時(shí)默認(rèn)/tmp/update.img,但建議傳入/userdata/update.img,避免 recovery 模式下無法讀取固件;
--reboot:非必需,若無需自動(dòng)重啟,可省略此參數(shù)(需手動(dòng)進(jìn)入 recovery 模式)。
2.4升級(jí)全流程
updateEngine 的升級(jí)流程可分為 6 個(gè)核心步驟,結(jié)合RK3568的日志輸出更易理解和定位流程節(jié)點(diǎn):
1.版本校驗(yàn)(可選):若指定--version_url,對(duì)比遠(yuǎn)程版本文件與本地/etc/version,確認(rèn)是否需要升級(jí);
2.固件獲?。簭?span style="background-color:rgb(0,252,255);">--image_url下載(網(wǎng)絡(luò)升級(jí))或讀?。ū镜厣?jí))固件,保存至--savepath;
3.升級(jí) recovery 分區(qū):在 normal 模式下先更新 recovery 分區(qū),為后續(xù)恢復(fù)模式操作做準(zhǔn)備;
4.重啟觸發(fā):通過--reboot參數(shù)自動(dòng)重啟設(shè)備;
5.recovery 模式升級(jí):進(jìn)入 recovery 模式后,按--partition指定的分區(qū)列表執(zhí)行升級(jí);
6.完成重啟:升級(jí)成功后自動(dòng)重啟,進(jìn)入 normal 系統(tǒng)。
三、分區(qū)升級(jí)邏輯
updateEngine主要包含升級(jí)分區(qū)和寫Misc配置功能,?持命令參數(shù)如下:
***update_engine: Version V1.1.0***.--misc=now Linux A/B mode: Setting the current partition to bootable.--misc=other Linux A/B mode: Setting another partition to bootable.--misc=update Recovery mode: Setting the partition to be upgraded.--misc=wipe_userdata Format data partition.--update Upgrade mode.--partition=0x3FFC00 Set the partition to be upgraded.(NOTICE: OTA not supportupgrade loaderandparameter) 0x3FFC00:001111111111110000000000. uboot trust boot recovery rootfs oem uboot_a uboot_b boot_a boot_b system_a system_b. 000000000000000000000000: reserved 100000000000000000000000: Upgrade loader0x800000 010000000000000000000000: Upgradeparameter 0x400000 001000000000000000000000: Upgrade uboot0x200000 000100000000000000000000: Upgrade trust0x100000 000010000000000000000000: Upgrade boot0x80000 000001000000000000000000: Upgrade recovery0x40000 0x0100 000000100000000000000000: Upgrade rootfs0x20000 0x0010 000000010000000000000000: Upgrade oem0x10000 000000001000000000000000: Upgrade uboot_a0x8000 000000000100000000000000: Upgrade uboot_b0x4000 000000000010000000000000: Upgrade boot_a0x2000 000000000001000000000000: Upgrade boot_b0x1000 000000000000100000000000: Upgrade system_a0x800 000000000000010000000000: Upgrade system_b0x400 000000000000001000000000: Upgrade misc0x200 000000000000000100000000: Upgrade userdata0x100--reboot 運(yùn)?成功之后,機(jī)器重啟--version_url=url 如果有傳?路徑,升級(jí)之前會(huì)與/etc/version ?件中的 RK_VERSION= 版本值進(jìn)?--image_url=url 設(shè)置升級(jí)固件的路徑,可為遠(yuǎn)程或本地路徑。--savepath=url 設(shè)置保存固件的位置,如果沒有傳?且升級(jí)的固件路徑為遠(yuǎn)程地址,則默認(rèn)值為/tmp/update.img(無效 需設(shè)置否則下載會(huì)卡住)--update sdboot:走sdboot升級(jí)流程,即直接對(duì)flash操作,沒有分區(qū)概念。
updateEngine 通過--partition參數(shù)的十六進(jìn)制值指定升級(jí)分區(qū),每一位對(duì)應(yīng)一個(gè)分區(qū)的 “升級(jí)開關(guān)”(1 = 升級(jí),0 = 不升級(jí))。
示例:默認(rèn)值0x3FFC00對(duì)應(yīng) “uboot + trust + boot + recovery + rootfs + oem + uboot_a/b + boot_a/b + system_a/b” 的組合升級(jí),覆蓋主流核心分區(qū)。
四、分區(qū)單獨(dú)升級(jí)操作實(shí)例
4.1單獨(dú)升級(jí) kernel(boot 分區(qū))
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --partition=0x80000 \ --reboot &
原理:0x80000對(duì)應(yīng) boot 分區(qū),直接寫入固件,無需進(jìn)入 recovery 模式燒錄;
日志特征:會(huì)顯示write boot to /dev/block/by-name/boot及 MD5 校驗(yàn)成功信息。
4.2單獨(dú)升級(jí) kernel(boot 分區(qū))
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --partition=0x200000 \ --reboot &
?注意:u-boot 為引導(dǎo)核心分區(qū),升級(jí)后需確保固件兼容性,避免設(shè)備無法啟動(dòng)。
4.3單獨(dú)升級(jí) rootfs(需同步升級(jí) recovery)
updateEngine--image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --partition=0x60000 \ # 0x20000(rootfs)+0x40000(recovery)的組合值 --reboot &
?特殊說明:rootfs 為運(yùn)行中的文件系統(tǒng),直接寫入會(huì)導(dǎo)致異常,需同步升級(jí) recovery 分區(qū),通過 recovery 模式完成安全升級(jí)。
總結(jié)
updateEngine 為系統(tǒng)提供了靈活高效的 OTA 升級(jí)能力,通過合理配置、精準(zhǔn)指定分區(qū)與規(guī)范操作流程,可實(shí)現(xiàn)從內(nèi)核到文件系統(tǒng)的全場(chǎng)景升級(jí)。本文涵蓋從基礎(chǔ)配置到實(shí)戰(zhàn)示例的完整演示,開發(fā)者可根據(jù)實(shí)際需求調(diào)整參數(shù),快速落地設(shè)備升級(jí)方案。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3702瀏覽量
132561 -
OTA
+關(guān)注
關(guān)注
7文章
623瀏覽量
37533 -
Ubuntu
+關(guān)注
關(guān)注
5文章
601瀏覽量
32427
發(fā)布評(píng)論請(qǐng)先 登錄
技術(shù)帖 | RK3568開發(fā)板的OTA升級(jí)教程

如何進(jìn)行OTA操作升級(jí)?
全志T507開發(fā)板如何在Android系統(tǒng)上進(jìn)行OTA升級(jí)?
嵌入式OTA升級(jí)實(shí)現(xiàn)原理是什么
什么是在線OTA升級(jí)呢
設(shè)備OTA空中升級(jí)原理是什么
STM32F103C8的OTA升級(jí)流程是怎樣的
OTA的升級(jí)方法
如何實(shí)現(xiàn)OpenHarmony的OTA升級(jí)
分享一項(xiàng)可在線OTA升級(jí)的嵌入式系統(tǒng)設(shè)計(jì)
【筆記】MCU OTA升級(jí)流程

OTA升級(jí)的詳細(xì)流程
OTA軟件升級(jí)管理系統(tǒng)

評(píng)論