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

    文章

    4560

    浏览量

    143490
  • 数据线
    +关注

    关注

    8

    文章

    283

    浏览量

    37709
  • OTA
    OTA
    +关注

    关注

    7

    文章

    578

    浏览量

    35188
收藏 人收藏

    评论

    相关推荐

    OTA无线更新技术:升级系统,随时畅享FLIR最新技术!

    站在FLIR技术前沿,享受最新功能带来的便捷与高效! 1先进的OTA技术 OTA(Over-the-Air)技术能让您的FLIR热像仪无线接收最新功能和固件更新。只需连接Wi-Fi,热像仪就能自动查找并安装新功能、安全补丁和
    的头像 发表于 12-03 15:34 144次阅读
    <b class='flag-5'>OTA</b>无线更新技术:<b class='flag-5'>一</b>键<b class='flag-5'>升级</b>系统,随时畅享FLIR最新技术!

    请教,SIM卡PCB走线,这个CKL时钟线数据线DATA要等长嘛,一条走顶层一条走底层如图这样可以嘛

    请教,SIM卡PCB走线,这个CKL时钟线数据线DATA要等长嘛,长条顶层一条走底层如图这样可以嘛
    发表于 08-03 22:49

    S3N8R16工程代码里面只要调用了wifi、蓝牙、mqtt等相关接口,编译出来的固件拿去ota升级升级不了,为什么?

    碰到个很奇怪的现象,我的工程代码里面只要调用了wifi、蓝牙、mqtt等相关接口,编译出来的固件拿去ota升级升级不了,没有调用就能正常升级
    发表于 07-19 07:31

    在增强模式下引导加载程序时,OTA升级失败了,为什么?

    我注意到,当我在增强模式下重新启动以在 0x81000 时手动启动 user2 固件,然后运行 OTA 升级升级 user1,它看起来像开始升级
    发表于 07-18 07:12

    OTA升级完成后,跳转到新的固件时启动失败是怎么回事?

    OTA升级完成后,跳转到新的固件时启动失败,但是烧录进新的固件却可以正常启动。 重启代码如下: wifi_save_bin_info();
    发表于 07-11 07:54

    esp32-s3 ota固件升级报错怎么解决?

    a new connection E (118466) HTTP_CLIENT: Connection failed, sock < 0 连上wifi后,通过ESP HTTPS OTA进行固件升级报错,希望能得到解决,感
    发表于 06-17 08:30

    使用ESP32C3进行蓝牙OTA升级升级完成后提示没有找到OTA数据,为什么?

    完成后提示没有找到OTA数据, 在网上找了下说是分区表丢失问题,附件为我设置的分区表,单侧都是没问题的,请教还有哪里需要注意的???
    发表于 06-17 07:02

    请问esp32 ota升级如何获取更新进度?

    所用的是esp32-s2 idf:4.4调用esp_https_ota API进行固件升级,想获取更新进度,但不知道怎么实现,有人做过或者有思路指点下吗?
    发表于 06-14 07:20

    ESP-IDF是否支持基于BLE的OTA升级

    节点需要切换到WiFi才能完成HTTP升级,ESP-IDF是否支持基于BLE的OTA升级
    发表于 06-12 07:49

    ESP-IDF4.4 OTA升级失败的原因?

    ESP-IDF4.4 OTA 功能,在启动OTA功能后下载固件过程中出现wifi无Internet访问,然后很快网络恢复,需要等待很久后OTA升级
    发表于 06-06 08:19

    ota固件升级成功后,重启esp32-s3出现警告是怎么回事?

    ota固件升级成功后,重启esp32-s3。 抛出了个警告,如下:Code: Select all Warning: checksum mismatch between flashe
    发表于 06-06 07:09

    ZDP1440系列小技巧—如何OTA差分升级显示素材?

    ZDP1440是款基于开源GUI引擎的图像显示专用驱动芯片,支持U盘、SD卡本地升级UI固件,同时也支持通过UART/SPI方式进行OTA升级
    的头像 发表于 05-06 14:01 875次阅读
    ZDP1440系列小技巧—如何<b class='flag-5'>OTA</b>差分<b class='flag-5'>升级</b>显示素材?

    通过RK3568开发板进行OTA本地程序升级

    说起OTA我们应该都不陌生,它是种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上。我们不仅可以通过网络下载OTA升级包,也可以
    发表于 04-20 11:23

    ota升级是什么意思 ota升级有什么用

    升级的意义和用途。 首先,OTA升级大大提高了设备的可用性和用户体验。在过去,设备需要通过USB、蓝牙或数据线等方式连接到电脑,以进行固件
    的头像 发表于 02-02 10:25 5484次阅读

    如何通过雅特力AT32WB415的蓝牙模块来进行OTA升级

    中的蓝牙模块(BLE)接收上位机发送的升级命令和程序代码。OTA分为两个部分,用户可以选择OTA升级BLE模块APP,也可以选择
    的头像 发表于 12-20 08:15 836次阅读
    如何通过雅特力AT32WB415的蓝牙模块来进行<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>