前言:
在嵌入式系統設備管理中,OTA(Over-The-Air)升級是實現設備遠程維護、功能迭代的核心能力。本文基于 Ubuntu 系統環境,詳細拆解 updateEngine 工具的 OTA 升級方案,從配置開啟、命令使用到實戰案例與問題排查,為開發者提供一套可直接落地的操作指南
一、recovery配置updateEngine 支持
因OTA升級過程中需要進入到recovery模式下進行升級,因此需要確保recovery文件系統中存在updateEngine指令。
要使用 updateEngine 進行 OTA 升級,需先通過編譯recovery配置開啟相關功能。針對 Ubuntu 系統,需在recovery配置文件中添加以下參數:
BR2_PACKAGE_RECOVERY=y # 開啟升級核心功能BR2_PACKAGE_RECOVERY_USE_UPDATEENGINE=y # 啟用新升級程序,不配置則默認使?原有升級流程BR2_PACKAGE_RECOVERY_UPDATEENGINEBIN=y # 編譯新升級程序文件BR2_PACKAGE_RECOVERY_NO_UI=y # 關閉UI界面
上述配置的核心是通過USE_UPDATEENGINE指定使用新升級框架,確保后續命令可調用updateEngine工具完成升級操作。
Ubuntu 的updateEngine 工具請通過拉取源碼進行編譯生成。
二、updateEngine 命令詳解
updateEngine支持網絡遠程升級與本地固件升級,命令參數靈活且可按需組合,核心用法如下:
2.1網絡升級:從遠程服務器拉取固件
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --reboot &
--image_url:遠程固件地址(HTTP/HTTPS 協議均可);
--misc=update:指定進入升級模式;
--savepath:固件本地保存路徑(建議/userdata/update.img,與 recovery 模式默認掛載路徑一致,避免檢索失敗);
--reboot:升級后自動重啟進入 recovery 模式完成后續操作。
2.2本地升級:使用已下載的本地固件
本地升級無需網絡傳輸,直接讀取--image_url指定的本地固件路徑,其他參數與網絡升級一致。
2.3可缺省參數說明
--version_url:版本文件地址(遠程 / 本地均可),用于升級前與/etc/version中的RK_VERSION比對,缺省時不進行版本校驗;
--partition:指定升級分區(默認0x3FFC00),不?持升級parameter 和loader分區
--savepath:缺省時默認/tmp/update.img,但建議傳入/userdata/update.img,避免 recovery 模式下無法讀取固件;
--reboot:非必需,若無需自動重啟,可省略此參數(需手動進入 recovery 模式)。
2.4升級全流程
updateEngine 的升級流程可分為 6 個核心步驟,結合RK3568的日志輸出更易理解和定位流程節點:
1.版本校驗(可選):若指定--version_url,對比遠程版本文件與本地/etc/version,確認是否需要升級;
2.固件獲取:從--image_url下載(網絡升級)或讀取(本地升級)固件,保存至--savepath;

3.升級 recovery 分區:在 normal 模式下先更新 recovery 分區,為后續恢復模式操作做準備;

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

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

4.2單獨升級 kernel(boot 分區)
updateEngine --image_url=http://192.168.0.190/recovery/update.img \ --misc=update \ --savepath=/userdata/update.img \ --partition=0x200000 \ --reboot &
?注意:u-boot 為引導核心分區,升級后需確保固件兼容性,避免設備無法啟動。

4.3單獨升級 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 為運行中的文件系統,直接寫入會導致異常,需同步升級 recovery 分區,通過 recovery 模式完成安全升級。
總結
updateEngine 為系統提供了靈活高效的 OTA 升級能力,通過合理配置、精準指定分區與規范操作流程,可實現從內核到文件系統的全場景升級。本文涵蓋從基礎配置到實戰示例的完整演示,開發者可根據實際需求調整參數,快速落地設備升級方案。
-
嵌入式系統
+關注
關注
41文章
3719瀏覽量
133225 -
OTA
+關注
關注
7文章
624瀏覽量
37994 -
Ubuntu
+關注
關注
5文章
603瀏覽量
32954
發布評論請先 登錄
如何進行OTA操作升級?
全志T507開發板如何在Android系統上進行OTA升級?
嵌入式OTA升級實現原理是什么
設備OTA空中升級原理是什么
STM32F103C8的OTA升級流程是怎樣的
如何實現OpenHarmony的OTA升級
【筆記】MCU OTA升級流程

技術筆記 | Ubuntu 系統 OTA 升級全流程詳解
評論