技术笔记 | 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)                      0x3FFC000011 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

              如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 表面处理…