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

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

3天内不再提示

【OTA升级】无需数据线,一条命令即可完成固件升级!

Firefly开源团队 2024-12-11 01:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

OTA介绍

OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新设备固件或软件的方法。设备批量投入使用后,由于部署范围太广、设备数量太多、部署的位置特殊、没有预留硬件有线升级接口等原因,用户往往无法人为的通过有线方式更新设备固件,这时候就可以通过 OTA 进行网络升级。

UpdateEngine介绍

Firefly 在 Linux 平台上提供了 UpdateEngine 开源 OTA 升级工具,工具支持远程下载固件、固件校验、固件解包、完整固件/分区升级。

4721104e-b718-11ef-8084-92fbcf53809c.png

UpdateEngine工作原理

UpdateEngine 会解析 Rockchip 格式的固件,并且计算到每个分区镜像在固件中的偏移。提取每个分区镜像的末尾 crc 校验信息,对固件和分区镜像进行校验,确保完整性。

UpdateEngine 会把固件存放的路径(如:/userdata/update.img)和需要升级的分区信息写入 misc 分区,并且打上 ”update“标志,让设备在重启后自动进入 recovery 模式。

在 recovery 模式中 userdata 分区会自动挂载到 /userdata 下,系统如果检查到 “update”标志,recovery 就会调用 rkupdate 对固件进行解析并且升级到存储设备中。

设备在 recovery 模式时,根文件系统会运行在 ramdisk 内存上,而不是原系统存储上(如:emmc)。所以程序可以正常的向存储设备分区进行写操作。

OTA升级流程图

47406ed0-b718-11ef-8084-92fbcf53809c.png

OTA固件制作

“OTA 升级固件“”实际上就是 SDK 打包出来的 Rockchip 格式的固件。如果用户只需要对某些分区进行升级而不是完整固件升级,可以通过修改 package-file 来裁剪固件大小。

位置在 Firefly_SDK/tools/linux/Linux_Pack_Firmware/rockdev/package-file

475de802-b718-11ef-8084-92fbcf53809c.png

“RESERVED”代表预留不打包的意思。例如:用户如果只需要更新 kernel 、uboot、bootloader,可以把 rootfs 分区设置成“RESERVED”,这样可以大大的减少固件大小。

OTA固件升级步骤

本文实例的实际操作软硬件环境:

设备:AIO-3588Q

固件:AIO-3588Q-RTLINUX_Ubuntu20.04-Gnome-r240_v1.1.1d_231018


1. 安装 UpdateEngine

在 Firefly官方的 ubuntu20.04 和 ubuntu22.04 apt源中已经添加了 updateEngine 包,可以直接使用 apt 安装。

apt updateapt install updateengine

如果是其他 Linux 发行版,也可以直接编译运行。

apt install libdrm-dev libssl-dev libbz2-dev libcurl4-openssl-dev gitgit clone https://gitlab.com/firefly-linux/external/recovery.gitcd recoverymake -j8

2.升级远程固件

updateEngine --misc=update --image_url=http://172.16.0.123:8000/update.img --savepath=/userdata/update.img --partition=0xFFFC00 --reboot

--misc=update:misc 中写入“update”标志,通知 recovery 需要进行 OTA 升级

--image_url:指定固件路径

--savepath:指定固件存放路径

--partition:指定需要升级的分区,不指定则默认是 0X3FFC00

--reboot:执行完成后是否自动 reboot

476dc4b6-b718-11ef-8084-92fbcf53809c.png

简单的搭建存放固件的 http 服务器。

python3 -m http.server 80

3. 升级本地固件

updateEngine --misc=update --image_url=/userdata/update.img --partition=0xFFFC00 --reboot

参数同上

4. 升级完成

执行命令后会自动重启进入 recovery 升级,user LED 灯闪烁,升级完成后设备会自动重启进入正常的操作系统

升级前:

479822d8-b718-11ef-8084-92fbcf53809c.png

升级后:

47ac8c00-b718-11ef-8084-92fbcf53809c.png

注意事项

1. 分区要求

如果你的设备只是单个系统启动,不是 A/B 启动,那么你的分区表中必须包含 misc 分区和 recovery 分区。另外如果固件存放在系统硬盘上的 userdata 分区,那么不能修改分区表中的 Userdata 起始位置。

2. 固件存放

无论远程更新或本地更新,固件最终的存放路径必须要放在 /userdata 下,有其他的存储介质除外,但也需要在 recovery 上可以做到自动挂载。

3.Userdata 用户数据

Recovery 在 updateEning OTA 升级时会保留 userdata 数据,所以 misc 不会升级,也不会擦除 userdata 分区数据。如有需要可以自定义 recovery 的代码,Firefly_SDK/external/rkupdate/RKAndroidDevice.cpp => DownloadImage,去掉 MISC 的判断条件,重新编译 recovery 打包 OTA 升级固件。

47c30f70-b718-11ef-8084-92fbcf53809c.png

更加安全的 OTA 升级应该配合A/B 系统来完成,后续我们还会单独介绍 A/B 系统的 OTA 升级。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 无线通信
    +关注

    关注

    58

    文章

    4860

    浏览量

    146473
  • 数据线
    +关注

    关注

    8

    文章

    311

    浏览量

    53789
  • OTA
    OTA
    +关注

    关注

    7

    文章

    623

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    般想要实现OTA的话使用蓝牙升级好还是4G这种方式实现升级

    般想要实现OTA的话,使用蓝牙升级好还是4G这种方式实现升级
    发表于 12-09 06:01

    Bootloader固件升级的步骤

    Hound 的上位机通信过程。 在具体项目中,我们需要按照客户的需求来实现升级,所以要定制个专有的协议,专门配置上位机软件的各种命令。上位机 APP 通常由客户开发,我们只需按照协议来完成
    发表于 11-19 07:41

    硕博电子OTA远程升级平台#OTA#硕博电子#OTA升级

    OTA
    长沙硕博电子科技股份有限公司
    发布于 :2025年10月29日 11:19:46

    使用RTT的维护云进行远程固件升级OTA),怎么没有网络升级的方式?

    使用RTT的维护云进行远程固件升级OTA),怎么没有网络升级的方式的?只有蓝牙,近距离的固件升级
    发表于 10-13 06:36

    ota升级完成后,bootloader没有将download区的新代码搬运到app区?

    ota升级完成后,bootloader没有把download区的新固件搬运到app区,版本也改了,可以保证是和上次的版本不样,也没有打印任
    发表于 09-29 10:04

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

    开启、命令使用到实战案例与问题排查,为开发者提供套可直接落地的操作指南、recovery配置updateEngine支持因OTA升级过程
    的头像 发表于 07-31 08:32 837次阅读
    技术笔记 | Ubuntu 系统 <b class='flag-5'>OTA</b> <b class='flag-5'>升级</b>全流程详解

    ESP32通过OTA无线局域网远程升级下载程序

    本文介绍了ESP32通过OTA无线局域网远程升级固件的基本方法
    的头像 发表于 07-22 13:21 1480次阅读
    ESP32通过<b class='flag-5'>OTA</b>无线局域网远程<b class='flag-5'>升级</b>下载程序

    蓝牙空中升级(OTA)原理

    1. 概述 所谓DFU(Device Firmware Update),就是设备固件升级的意思,而OTA(Over The Air)是实现DFU的种方式而已,准确说,
    发表于 07-21 14:50

    详解蓝牙空中升级(OTA)原理与步骤

    如何实现Bluetooth LE OTA?什么叫DFU?如何通过UART实现固件升级?又如何通过USB实现固件升级?怎么保证
    的头像 发表于 07-04 09:56 4054次阅读
    详解蓝牙空中<b class='flag-5'>升级</b>(<b class='flag-5'>OTA</b>)原理与步骤

    使用STM32H755ZIQ-NUCLEO时,由于数据线的原因导致固件升级失败怎么解决?

    使用STM32H755ZIQ-NUCLEO时,由于数据线的原因导致固件升级失败,目前没有办法下载程序,大佬们解决的办法?
    发表于 06-17 06:47

    使用STM32H755ZIQ-NUCLEO时,由于数据线的原因导致固件升级失败,怎么解决?

    使用STM32H755ZIQ-NUCLEO时,由于数据线的原因导致固件升级失败,目前没有办法下载程序,大佬们解决的办法?
    发表于 06-16 06:20

    瑞萨电子MCU无感OTA升级功能介绍

    在工业控制、电机驱动乃至物联网边缘节点中,固件在线升级OTA)已成为产品生命周期管理的标配。然而传统OTA往往伴随停机、风险与低效。瑞萨电子MCU中的Dual‑Bank闪存架构为工程
    的头像 发表于 05-15 14:36 1389次阅读
    瑞萨电子MCU无感<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>功能介绍

    文解锁OTA远程升级方案!基于RK3562全国产平台

    在设备维护成本高、用户体验难提升的双重难题下,OTA(Over-the-Air)空间下载技术的出现,无疑成为破解困境的“金钥匙”,它是种通过无线网络实现设备远程升级的技术,全程数据
    的头像 发表于 04-07 10:15 1089次阅读
    <b class='flag-5'>一</b>文解锁<b class='flag-5'>OTA</b>远程<b class='flag-5'>升级</b>方案!基于RK3562全国产平台

    浅谈车规MCU (MGEQ1C064) OTA升级

    使用笙泉官方提供的上位机软件即可更新MCU固件(如下)。 如客户需要实现无线方式的OTA升级,笙泉会为客户提供串口ISP(OTA)
    发表于 03-04 12:52

    OTA软件升级管理系统

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