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

前言:在嵌入式系統設備管理中,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 loader?and?parameter)? ? ? ? ? ? ? ? ? ? ??0x3FFC00:?0011?1111?1111?1100?0000?0000.? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? uboot trust boot recovery rootfs oem? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? uboot_a uboot_b boot_a boot_b system_a system_b.? ? ? ? ? ? ? ? ? ? ??000000000000000000000000: reserved? ? ? ? ? ? ? ? ? ? ??100000000000000000000000: Upgrade loader		0x800000? ? ? ? ? ? ? ? ? ? ??010000000000000000000000: Upgrade?parameter? ? ? ? ?0x400000? ? ? ? ? ? ? ? ? ? ??001000000000000000000000: Upgrade uboot		0x200000? ? ? ? ? ? ? ? ? ? ??000100000000000000000000: Upgrade trust		0x100000? ? ? ? ? ? ? ? ? ? ??000010000000000000000000: Upgrade boot		0x80000? ? ? ? ? ? ? ? ? ? ??000001000000000000000000: Upgrade recovery	0x40000? ?0x0100? ? ? ? ? ? ? ? ? ? ??000000100000000000000000: Upgrade rootfs		0x20000? ?0x0010? ? ? ? ? ? ? ? ? ? ??000000010000000000000000: Upgrade oem			0x10000? ? ? ? ? ? ? ? ? ? ??000000001000000000000000: Upgrade uboot_a		0x8000? ? ? ? ? ? ? ? ? ? ??000000000100000000000000: Upgrade uboot_b		0x4000? ? ? ? ? ? ? ? ? ? ??000000000010000000000000: Upgrade boot_a		0x2000? ? ? ? ? ? ? ? ? ? ??000000000001000000000000: Upgrade boot_b		0x1000? ? ? ? ? ? ? ? ? ? ??000000000000100000000000: Upgrade system_a	0x800? ? ? ? ? ? ? ? ? ? ??000000000000010000000000: Upgrade system_b	0x400? ? ? ? ? ? ? ? ? ? ??000000000000001000000000: Upgrade misc		0x200? ? ? ? ? ? ? ? ? ? ??000000000000000100000000: Upgrade userdata	0x100
        --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 升級能力,通過合理配置、精準指定分區與規范操作流程,可實現從內核到文件系統的全場景升級。本文涵蓋從基礎配置到實戰示例的完整演示,開發者可根據實際需求調整參數,快速落地設備升級方案。

              想了解更多相關技術知識或產品信息,請關注眺望電子并聯系我們,我們將竭誠為您服務!

              本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
              如若轉載,請注明出處:http://www.pswp.cn/bicheng/91492.shtml
              繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91492.shtml
              英文地址,請注明出處:http://en.pswp.cn/bicheng/91492.shtml

              如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

              相關文章

              重復請求問題

              重復請求問題 使用Promise和AbortController來實現思路是:通過在會話緩存中存儲和比較請求信息,來防止用戶在短時間內重復提交相同的請求。 具體思路如下: 存儲請求信息:每次請求時,將請求的相關信息(如URL…

              CentOS7 Docker安裝RocketMQ完整教程

              目錄 前言 環境準備 系統要求 檢查Docker狀態 創建網絡和目錄 創建Docker網絡 創建數據目錄 安裝NameServer 啟動NameServer容器 參數說明 驗證NameServer啟動 安裝Broker 創建Broker配置文件 啟動Broker容器 參數說明 驗證Broker啟動 安裝管理控制臺 啟動控制…

              main函數,常量指針與指針常量,野指針等,void與void的區別

              指針(續) main函數原型 定義 main函數有多種定義格式,main函數也是函數,函數相關的結論對main函數也有效。 main函數的完整寫法:int main(int argc, char *argv[]){..}int main(int argc, char **argv){..}擴展寫法&am…

              Mac m系列芯片安裝node14版本使用nvm + Rosetta 2

              由于蘋果 M 系列芯片(包括 M4)使用的是 ARM 架構,而 Node.js 14 是在英特爾 x86 架構時代發布的,因此在 M 系列 Mac 上安裝 Node.js 14 可能會遇到兼容性問題 解決方法:使用 nvm Rosetta 2右鍵點擊「終端」→「顯示簡…

              前端基礎之《Vue(26)—Vue3兩種語法范式》

              一、選項式1、HTML寫法<!-- 跟 Vue 說 Hello World&#xff01; --><script type"module"> import { createApp } from vuecreateApp({data() {return {message: Hello World!}} }).mount(#app) </script><div id"app"><h1>…

              題目:BUUCTF之rip(pwn)

              網址 BUUCTF在線評測https://buuoj.cn/challenges#rip打開&#xff0c;如圖所示 提示&#xff1a;先別啟動靶機&#xff0c;靶機可以最后在啟動&#xff0c;先分析下載的附件pwn1。 點擊下載&#xff0c;下載完成之后&#xff0c;該文件后綴類型改為exe&#xff08;就是將pwn…

              el-button長按觸發事件(含未響應的解決方案)

              參考代碼實現按鈕長按觸發邏輯 <template><el-button mousedown"handleMouseDown" mouseup"handleMouseUp">長按我</el-button> </template>data(){return{isPressed: false,timer: null,}},methods:{handleMouseDown() {this.isP…

              List和 ObservableCollection 的區別

              1. 變更通知機制?? ??ObservableCollection<T>?? 實現了INotifyCollectionChanged和INotifyPropertyChanged接口&#xff0c;當集合元素被添加、刪除、替換或重置時&#xff0c;會自動觸發CollectionChanged事件&#xff0c;通知綁定的UI控件更新&#xff08;如WPF…

              支付寶沙箱(白屏,用戶訂單參數錯誤等)

              情況&#xff1a;Laravel項目的line 對接 支付寶沙箱測試 手機網站支付 1&#xff1a;沙箱地址&#xff0c;小到我找不到&#xff1a;沙箱應用 - 開放平臺 2&#xff1a;雖然提供了系統密鑰&#xff0c;但是只是測API鏈接的&#xff0c;要沙箱測試轉賬什么的&#xff0c;得用…

              【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博評論IP地圖可視化分析實現

              大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博評論IP地圖可視化分析實現 視頻在線地…

              【代碼隨想錄】刷題筆記——二叉樹篇

              目錄 144. 二叉樹的前序遍歷 94. 二叉樹的中序遍歷 145. 二叉樹的后序遍歷 102. 二叉樹的層序遍歷 226. 翻轉二叉樹 101. 對稱二叉樹 104. 二叉樹的最大深度 111. 二叉樹的最小深度 222. 完全二叉樹的節點個數 110. 平衡二叉樹 257. 二叉樹的所有路徑 404. 左葉子之…

              基于deepseek的文本解析 - 超長文本的md結構化

              pdf超長合同或其他超100頁非結構化文檔&#xff0c;很難全量提交deepseek進行分析&#xff0c;一般需要先進行分割。然而&#xff0c;不管是langchain還是llamaindex提供的文本分割工具&#xff0c;很難直接對非結構化文本進行準確的內容分割&#xff0c;很多原始整體段落被劃分…

              介紹一個圖像修復開源項目,從模糊到清晰僅需1.7秒:HYPIR圖像修復技術如何改變數字世界?

              文章概要 作為一名長期關注圖像處理技術的愛好者&#xff0c;當我第一次接觸到HYPIR這一革命性圖像修復工具時&#xff0c;我被其驚人的速度和質量所震撼。本文將全面介紹由中國科學院深圳先進技術研究院董超研究員團隊研發的HYPIR圖像修復大模型&#xff0c;詳細解析其核心技術…

              基于UDP的SNMP協議

              SNMP協議詳解 SNMP (Simple Network Management Protocol)&#xff0c;“簡單網絡管理協議”&#xff0c;是廣泛應用于TCP/IP網絡中&#xff0c;用于管理和監控網絡設備的一種標準協議。它允許網絡管理員查詢網絡設備的狀態信息、配置參數、接收故障告警等&#xff0c;從而實現…

              3D空間中的變換矩陣

              3D 空間中的變換矩陣詳解 在 3D 計算機圖形學中&#xff0c;所有幾何變換都可以通過 44 齊次變換矩陣 來表示。以下詳細介紹各種變換矩陣及其原理。 核心變換矩陣 1. 單位矩陣&#xff08;不變變換&#xff09; I[1000010000100001] I \begin{bmatrix} 1 & 0 & 0 &…

              長連接(Long Connection)詳解

              一、長連接基本概念長連接&#xff08;也稱為持久連接&#xff09;是指在一個TCP連接上可以連續發送多個HTTP請求/響應&#xff0c;而不是每次通信都建立新的連接。這是HTTP/1.1的默認行為&#xff0c;通過Connection: keep-alive頭部實現。二、工作原理1. 傳統短連接流程客戶端…

              【匯總】接口自動化測試 + 持續集成(文末視頻演示)

              技術棧&#xff1a;java testng httpclient allure fastjson jsonpath poi/yaml log4j 有建議請聯系wx&#xff1a;ren168632201 java接口自動化系列(01)&#xff1a;自動化測試框架設計(入門版) java接口自動化系列(02)&#xff1a;測試數據文件設計(excel/yam) java接…

              科研快報 |無人機+AI:廣東防控基孔熱背后的技術革命

              Prism Path 科 研 快 報 CS跨學科頂尖期刊論文資訊 -NO.2025001- 人工智能在登革熱預防、控制與管理中的作用&#xff1a;一項技術性敘述綜述 The role of artificial intelligence for dengue prevention, control, and management: A technical narrative review 期刊…

              常見的中間件漏洞

              建議&#xff1a;啟動下一個環境時&#xff0c;將上一個環境關閉&#xff0c;防止端口沖突和運行卡頓1.TomcatTomcat put方法任意文件寫入漏洞Apache Tomcat 7.0.0 - 7.0.79 Apache Tomcat 8.5.19環境&#xff1a;cd vulhub-master/tomcat/CVE-2017-12615 docker-compose up -d…

              7寸工業模組 XA070Y2-L01芯顯科技詳細參數資料

              芯顯7寸工業液晶屏 XA070Y2-L01 技術規格單 基礎信息 項目 參數 制造商 芯顯 型號 XA070Y2-L01 顯示技術 a-Si TN TFT-LCD 應用場景 車載中控 / 工業HMI 屏幕尺寸 7.0英寸 機械結構 特性 指標 顯示區域 152.4 91.44 mm 整機尺寸 165 104.09 9.1 mm 公差范圍 0.5 mm 表面處理…