0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

技术笔记 | Ubuntu 系统 OTA 升级全流程详解

眺望电子 ? 2025-07-31 08:32 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言:

嵌入式系统设备管理中,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

d95f2eb6-6da5-11f0-9080-92fbcf53809c.png

3.升级 recovery 分区:在 normal 模式下先更新 recovery 分区,为后续恢复模式操作做准备;

d96cfa3c-6da5-11f0-9080-92fbcf53809c.png

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 = 不升级)。

d99df1b4-6da5-11f0-9080-92fbcf53809c.png

示例:默认值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 校验成功信息。


d9af6390-6da5-11f0-9080-92fbcf53809c.png

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 为引导核心分区,升级后需确保固件兼容性,避免设备无法启动。

d9b7217a-6da5-11f0-9080-92fbcf53809c.png

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

    文章

    3686

    浏览量

    131598
  • OTA
    OTA
    +关注

    关注

    7

    文章

    615

    浏览量

    36715
  • Ubuntu
    +关注

    关注

    5

    文章

    595

    浏览量

    31516
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    技术帖 | RK3568开发板的OTA升级教程

    通过飞凌嵌入式OK3568-C开发板来为大家介绍OTA升级流程,本地升级程序recovery执行升级
    的头像 发表于 04-20 08:01 ?2287次阅读
    <b class='flag-5'>技术</b>帖 | RK3568开发板的<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>教程

    升级堆栈 OTA 笔记

    升级堆栈 OTA 笔记
    发表于 01-24 17:43

    如何进行OTA操作升级

    蓝牙固件空中升级OTA)涉及到蓝牙无线通信、固件外存分布、固件内存分布(定制链接脚本)、固件二次引导等技术,需要开发人员深入理解蓝牙单芯片的存储架构、启动引导流程、外存设备驱动和产品
    发表于 09-16 10:36

    志T507开发板如何在Android系统上进行OTA升级

    OTA升级是Android系统所提供的标准软件升级方式。它功能十分强大,并且提供了完全升级(完整包)和增量
    发表于 09-22 17:05

    嵌入式OTA升级实现原理是什么

    目录一、简介1.1 概念1.2 优点1.3 实现原理二、MCU OTA升级2.1 制作升级包2.2 下载升级包2.3 验签升级包2.4 更新
    发表于 12-14 07:24

    什么是在线OTA升级

    什么是在线OTA升级- OTA是Over-the-Air的简写,空中下载技术的意思。- OTA在线升级
    发表于 12-22 07:44

    设备OTA空中升级原理是什么

    不同的方案进行软件升级。2.空中升级流程在线升级流程,简化就是设备运行旧软件的同时,获取新软件包,再执行特殊操作使用新软件覆盖旧软件,最后运
    发表于 01-19 07:44

    STM32F103C8的OTA升级流程是怎样的

    OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需要以页为单位进行。OTA 实现的思路是,
    发表于 01-24 08:13

    OTA升级方法

    ,再决定升级方式,是单备份升级还是双备份升级。本文主要讲解嵌入式设备的OTA升级流程架构,虽然会
    发表于 01-25 08:12

    如何实现OpenHarmony的OTA升级

    OTA简介随着设备系统日新月异,用户如何及时获取系统的更新,体验新版本带来的新的体验,以及提升系统的稳定性和安全性成为了每个厂商都面临的严峻问题。O
    发表于 02-07 10:29

    分享一项可在线OTA升级的嵌入式系统设计

    1、什么是在线OTA升级OTA是Over-the-Air的简写,空中下载技术的意思。OTA在线升级
    发表于 03-21 14:00

    特斯拉的OTA升级步骤详解

    本文主要详细阐述了特斯拉的OTA升级过程。
    的头像 发表于 09-24 09:07 ?2.5w次阅读

    笔记】MCU OTA升级流程

    OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需要以页为单位进行。OTA 实现的思路是,
    发表于 11-29 18:21 ?34次下载
    【<b class='flag-5'>笔记</b>】MCU <b class='flag-5'>OTA</b><b class='flag-5'>升级</b><b class='flag-5'>流程</b>

    OTA升级的详细流程

    OTA升级已经不是什么新鲜事,现在大多数物联网终端设备,基本具备这个功能。
    的头像 发表于 07-04 09:08 ?1.8w次阅读

    OTA软件升级管理系统

    OTA(Over-the-Air Technology,空中下载技术)是通过空中下载的方式对车辆中的软件进行远程升级。经纬恒润OTA软件升级
    的头像 发表于 01-13 09:39 ?830次阅读
    <b class='flag-5'>OTA</b>软件<b class='flag-5'>升级</b>管理<b class='flag-5'>系统</b>