前言:
在嵌入式系統(tǒng)設(shè)備管理中,OTA(Over-The-Air)升級是實現(xiàn)設(shè)備遠(yuǎn)程維護(hù)、功能迭代的核心能力。本文基于 Ubuntu 系統(tǒng)環(huán)境,詳細(xì)拆解 updateEngine 工具的 OTA 升級方案,從配置開啟、命令使用到實戰(zhàn)案例與問題排查,為開發(fā)者提供一套可直接落地的操作指南
一、recovery配置updateEngine 支持
因OTA升級過程中需要進(jìn)入到recovery模式下進(jìn)行升級,因此需要確保recovery文件系統(tǒng)中存在updateEngine指令。
要使用 updateEngine 進(jìn)行 OTA 升級,需先通過編譯recovery配置開啟相關(guān)功能。針對 Ubuntu 系統(tǒng),需在recovery配置文件中添加以下參數(shù):
BR2_PACKAGE_RECOVERY=y # 開啟升級核心功能BR2_PACKAGE_RECOVERY_USE_UPDATEENGINE=y # 啟用新升級程序,不配置則默認(rèn)使?原有升級流程BR2_PACKAGE_RECOVERY_UPDATEENGINEBIN=y # 編譯新升級程序文件BR2_PACKAGE_RECOVERY_NO_UI=y # 關(guān)閉UI界面
上述配置的核心是通過USE_UPDATEENGINE指定使用新升級框架,確保后續(xù)命令可調(diào)用updateEngine工具完成升級操作。
Ubuntu 的updateEngine 工具請通過拉取源碼進(jìn)行編譯生成。
二、updateEngine 命令詳解
updateEngine支持網(wǎng)絡(luò)遠(yuǎn)程升級與本地固件升級,命令參數(shù)靈活且可按需組合,核心用法如下:
2.1網(wǎng)絡(luò)升級:從遠(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)入升級模式;
--savepath:固件本地保存路徑(建議/userdata/update.img,與 recovery 模式默認(rèn)掛載路徑一致,避免檢索失?。?;
--reboot:升級后自動重啟進(jìn)入 recovery 模式完成后續(xù)操作。
2.2本地升級:使用已下載的本地固件
本地升級無需網(wǎng)絡(luò)傳輸,直接讀取--image_url指定的本地固件路徑,其他參數(shù)與網(wǎng)絡(luò)升級一致。
2.3可缺省參數(shù)說明
--version_url:版本文件地址(遠(yuǎn)程 / 本地均可),用于升級前與/etc/version中的RK_VERSION比對,缺省時不進(jìn)行版本校驗;
--partition:指定升級分區(qū)(默認(rèn)0x3FFC00),不?持升級parameter 和loader分區(qū)
--savepath:缺省時默認(rèn)/tmp/update.img,但建議傳入/userdata/update.img,避免 recovery 模式下無法讀取固件;
--reboot:非必需,若無需自動重啟,可省略此參數(shù)(需手動進(jìn)入 recovery 模式)。
2.4升級全流程
updateEngine 的升級流程可分為 6 個核心步驟,結(jié)合RK3568的日志輸出更易理解和定位流程節(jié)點(diǎn):
1.版本校驗(可選):若指定--version_url,對比遠(yuǎn)程版本文件與本地/etc/version,確認(rèn)是否需要升級;
2.固件獲?。簭?span style="background-color:rgb(0,252,255);">--image_url下載(網(wǎng)絡(luò)升級)或讀?。ū镜厣墸┕碳4嬷?span style="background-color:rgb(0,252,255);">--savepath;

3.升級 recovery 分區(qū):在 normal 模式下先更新 recovery 分區(qū),為后續(xù)恢復(fù)模式操作做準(zhǔn)備;

4.重啟觸發(fā):通過--reboot參數(shù)自動重啟設(shè)備;
5.recovery 模式升級:進(jìn)入 recovery 模式后,按--partition指定的分區(qū)列表執(zhí)行升級;
6.完成重啟:升級成功后自動重啟,進(jìn)入 normal 系統(tǒng)。
三、分區(qū)升級邏輯
updateEngine主要包含升級分區(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 如果有傳?路徑,升級之前會與/etc/version ?件中的 RK_VERSION= 版本值進(jìn)?--image_url=url 設(shè)置升級固件的路徑,可為遠(yuǎn)程或本地路徑。--savepath=url 設(shè)置保存固件的位置,如果沒有傳?且升級的固件路徑為遠(yuǎn)程地址,則默認(rèn)值為/tmp/update.img(無效 需設(shè)置否則下載會卡?。?-update sdboot:走sdboot升級流程,即直接對flash操作,沒有分區(qū)概念。
updateEngine 通過--partition參數(shù)的十六進(jìn)制值指定升級分區(qū),每一位對應(yīng)一個分區(qū)的 “升級開關(guān)”(1 = 升級,0 = 不升級)。

示例:默認(rèn)值0x3FFC00對應(yīng) “uboot + trust + boot + recovery + rootfs + oem + uboot_a/b + boot_a/b + system_a/b” 的組合升級,覆蓋主流核心分區(qū)。
四、分區(qū)單獨(dú)升級操作實例
4.1單獨(dú)升級 kernel(boot 分區(qū))
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --partition=0x80000 \ --reboot &
原理:0x80000對應(yīng) boot 分區(qū),直接寫入固件,無需進(jìn)入 recovery 模式燒錄;
日志特征:會顯示write boot to /dev/block/by-name/boot及 MD5 校驗成功信息。

4.2單獨(dú)升級 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ū),升級后需確保固件兼容性,避免設(shè)備無法啟動。

4.3單獨(dú)升級 rootfs(需同步升級 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),直接寫入會導(dǎo)致異常,需同步升級 recovery 分區(qū),通過 recovery 模式完成安全升級。
總結(jié)
updateEngine 為系統(tǒng)提供了靈活高效的 OTA 升級能力,通過合理配置、精準(zhǔn)指定分區(qū)與規(guī)范操作流程,可實現(xiàn)從內(nèi)核到文件系統(tǒng)的全場景升級。本文涵蓋從基礎(chǔ)配置到實戰(zhàn)示例的完整演示,開發(fā)者可根據(jù)實際需求調(diào)整參數(shù),快速落地設(shè)備升級方案。
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3702瀏覽量
132812 -
OTA
+關(guān)注
關(guān)注
7文章
623瀏覽量
37734 -
Ubuntu
+關(guān)注
關(guān)注
5文章
601瀏覽量
32629
發(fā)布評論請先 登錄
如何進(jìn)行OTA操作升級?
全志T507開發(fā)板如何在Android系統(tǒng)上進(jìn)行OTA升級?
嵌入式OTA升級實現(xiàn)原理是什么
設(shè)備OTA空中升級原理是什么
STM32F103C8的OTA升級流程是怎樣的
如何實現(xiàn)OpenHarmony的OTA升級
分享一項可在線OTA升級的嵌入式系統(tǒng)設(shè)計
【筆記】MCU OTA升級流程
OTA升級的詳細(xì)流程
OTA軟件升級管理系統(tǒng)

技術(shù)筆記 | Ubuntu 系統(tǒng) OTA 升級全流程詳解
評論