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

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

3天内不再提示

一文吃透RK平台OTA升级开发:从逻辑到调试的完整指南

jf_44130326 来源:Linux1024 2026-02-09 16:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Rockchip(简称RKAndroid平台开发中,OTAOver The Air)升级是实现设备软件迭代的核心方式。无论是本地卡刷升级,还是在线无缝更新,掌握OTA升级的技术细节,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查,全方位拆解RK平台OTA升级开发,附关键流程图示,助力开发者快速上手。

一、OTA升级核心逻辑:两种系统架构的差异

RK平台OTA升级需区分AB系统AB系统,两者的分区设计、升级流程差异显著,需针对性开发。

1.1AB系统:传统Recovery升级逻辑

AB系统(即传统分区系统)通过Recovery模式完成升级,核心特点是单组分区+重启升级,升级时设备需进入Recovery模式,暂时无法使用。

分区设计:仅包含一套系统分区(如systembootvendor等),升级时直接覆盖原分区。

升级流程

a.生成完整OTA包(含全量系统文件)或差异包(仅含版本间变更内容);

b.将升级包放入USB/SD卡或内置存储(如/data/media/0/);

c.设备检测到升级包后重启进入Recovery模式;

d.Recovery校验升级包,覆盖原系统分区,完成后重启进入新系统。

适用场景:对升级时效性要求不高、存储空间有限的设备(如入门级物联网设备、旧款智能硬件)。

1.2 AB系统:无缝升级逻辑

AB系统(双分区系统)通过双组分区+后台升级实现无缝更新,升级时设备可正常使用,重启后直接切换到新系统,核心特点是零停机升级

分区设计:所有关键分区(如bootsystemvendor)均包含A/B两组(如boot_a/boot_bsystem_a/system_b),一组为活跃分区(当前使用),一组为备用分区(待升级)。

升级流程

a.设备在Android主系统运行时,后台下载OTA包;

b.升级程序将OTA包内容写入备用分区(不影响活跃分区);

c.升级完成后提示用户重启,重启时切换活跃分区(如从A组切换到B组);

d.若新分区启动失败,系统自动回滚到原活跃分区,保障设备可用性。

适用场景:对升级体验要求高的设备(如高端智能屏、工业控制设备),需额外占用约一倍存储空间。

1.3核心逻辑对比图

wKgZPGkaiw2ARy-5AAFsqvnt6ko186.png

二、OTA升级开发核心技巧

无论是非AB还是AB系统,OTA开发的关键在于正确配置系统+生成合规升级包+适配升级介质,以下是实操技巧:

2.1系统配置技巧:按Android版本适配

AB系统默认关闭,需从Android系统、U-BootKernel三方面配置,不同Android版本配置差异如下:

配置维度

Android 12

Android 13

Android ≥14

Android系统配置

1. BoardConfig.mk中设BOARD_USES_AB_IMAGE := true2.新增recovery.fstab_AB(添加slotselect参数);3.导入AB配置并指定fstab文件

Android 12,支持压缩虚拟AB(需额外设BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION := true

1.直接在BoardConfig.mk中开启AB2.压缩虚拟AB仅支持GKI版本

U-Boot配置

芯片defconfig中添加CONFIG_ANDROID_AB=y

Android 12

Android 12

Kernel配置

无需额外配置

无需额外配置

无需额外配置

注意:虚拟AB功能(BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE := true)会降低升级性能,非必要不开启;RK3566/3568/3588trust分区,配置时需删除trust_a/trust_b相关项。

2.2 OTA包生成技巧:完整包与差异包

OTA包分为完整包(全量系统,适合首次升级或跨版本升级)和差异包(仅含变更内容,适合小版本迭代,体积小),生成命令需区分系统类型:

1)完整包生成

系统类型

命令1(原生make

命令2build.sh脚本,更简洁)

输出路径与重命名

AB

make installclean && make -j16 && make dist -j16 && ./mkimage.sh ota

build.sh –AUCKuop

out/target/product/rkxxxx/下生成rkxxxx-ota-eng.root.zip,重命名为update.zip

AB

make installclean && make -j16 && make dist -j16 && ./mkimage_ab.sh ota

build.sh -ABUCKuop

同非AB,需确保首次编译前执行make clean

关键技巧:发布固件必须用mkimage.sh ota(非AB)或mkimage_ab.sh otaAB),避免单独烧录Kernel,否则会导致差异包升级失败。

2)差异包生成(跨版本更新必备)

差异包需基于前一版本素材包当前版本素材包生成,步骤如下:

1.编译v1版本固件,保存素材包:out/target/product/rkxxxx/obj/PACKAGING/target_files_intermediates/rkxxx-target_files-eng.xxx.zip重命名为rkxxxx-target_files-v1.zip,并烧录v1固件到设备;

2.修改代码(Kernel/Android),编译v2版本固件,保存素材包为rkxxxx-target_files-v2.zip

3.执行差异包生成命令(按Android版本区分):

Android <13./build/tools/releasetools/ota_from_target_files -v -i旧素材包路径--block -p ./out/host/linux-x86新素材包路径 输出差异包路径

Android 13:需指定python3python3 ./build/tools/releasetools/ota_from_target_files ...

Android ≥14:直接调用工具:out/host/linux-x86/bin/ota_from_target_files ...

关键技巧:每发布一个版本,必须保存素材包(target_files.zip)和完整包,否则无法生成后续差异包。

2.3升级介质适配技巧:SD/ USB/ Loader

除了OTA包,升级介质(SD卡、USB盘)和Loader的适配也影响升级成功率:

SD升级卡制作:用SDDiskTool工具,选择固件升级模式,导入update.img,点击开始创建AB系统需先在工具config中配置UPGRADE_PROGRAM_PARTITION=boot_b

USB升级盘制作:先在U-Boot中开启CONFIG_ROCKCHIP_USB_BOOT=y(以RK3588为例,修改rk3588_defconfig添加该配置),再用SDDiskTool制作,步骤同SD卡。

Loader升级:正常OTA无需升级Loader,若需升级,将RKLoader.bin放入$(TARGET_DEVICE_DIR)/ota/loader目录,OTA打包时会自动加入;AB系统需单独生成update_loader.zip(编译后在rockdev目录下),通过Recovery命令升级。

三、调试要点:Log、屏幕与存储问题排查

OTA升级调试的核心是精准定位问题,需重点关注Log输出、屏幕显示、存储适配三大场景:

3.1 Log重定向:快速抓取升级日志

升级失败时,需通过Log定位原因,可将Log输出到串口、SD卡或/cache/recovery/目录,配置方式:

打开Log输出:修改bootable/recovery/Android.bp,添加对应宏定义:

串口输出:-DLogToSerial

/cache/recovery/输出:-DLogToCache

SD卡输出(生成recovery.log):-DLogToSDCard

查看Log:升级后通过adb pull /cache/recovery/recovery.log(非AB)或adb pull /data/misc/update_engine/logs/update_engine.logAB)获取日志,重点排查校验失败”“分区挂载错误等关键词。

3.2屏幕旋转适配:解决Recovery显示异常

部分设备(如横屏智能屏)在Recovery模式下屏幕显示颠倒,需修改旋转配置:

配置路径:device/rockchip/XXXX/BoardConfig.mk

旋转参数:

不旋转:TARGET_RECOVERY_DEFAULT_ROTATION := ROTATION_NONE

旋转90°ROTATION_RIGHT

旋转180°ROTATION_DOWN

旋转270°ROTATION_LEFT

3.3存储适配:NTFS格式与文件保存

NTFS格式支持:默认不支持NTFSUSB/SD卡,需先获取NTFS授权,再开启KernelNTFS配置(CONFIG_NTFS_FS=y),否则升级包无法识别。

关键文件保存:需持久化的文件(如升级状态、配置参数),建议保存到/cache/recovery/Recovery_*路径,该路径格式化时不会被清除,避免升级中断后配置丢失。

四、常见问题与解决方案

OTA升级中常遇到升级包无法识别”“升级失败回滚”“Loader升级失败等问题,以下是高频问题的排查思路:

4.1升级包无法识别/校验失败

问题现象

可能原因

解决方案

设备未弹出升级对话框

1.升级包未放在根目录;2.包名不是update.zip3. USB/SD卡未挂载

1.update.zip放入USB/SD卡根目录或/data/media/0/2.插拔USB线或重启设备触发检测;3. AB系统需用update_device.py脚本触发升级

升级包校验失败

1.包损坏或签名错误;2.素材包版本不匹配(差异包)

1.重新生成OTA包,确保签名密钥正确(默认key路径:Android 13device/rockchip/common/security/testkey,其他版本为build/make/target/product/security/testkey);2.差异包需确保基于前一版本素材包生成

4.2 AB系统升级回滚

问题现象

可能原因

解决方案

重启后回滚到原系统

1.备用分区写入错误;2.分区切换配置错误

1.查看update_engine.log,排查写入失败原因(如分区空间不足);2.检查U-BootCONFIG_ANDROID_AB是否开启,Android配置中slotselect参数是否添加

4.3 Loader升级失败

问题现象

可能原因

解决方案

OTA包未包含Loader

Loader未放入$(TARGET_DEVICE_DIR)/ota/loader

1.执行source build/envsetup.sh && lunch XXX后,用get_build_var TARGET_DEVICE_DIR确认路径;2.RKLoader.bin放入该路径下的ota/loader目录,重新打包

AB系统Loader升级无响应

未用专用升级包或命令

1.使用rockdev目录下的update_loader.zip2.执行命令:adb push update_loader.zip /cache/ && adb shell "echo '--fw_rkloader=/cache/update_loader.zip' > /cache/recovery/command" && adb reboot recovery

五、总结

RK平台OTA升级开发需围绕系统架构选型配置适配包生成调试排查四个环节,核心要点如下:

1.AB系统适合轻量设备,AB系统适合无缝升级,需权衡存储空间与体验;

2.生成OTA包时,完整包用mkimage.sh/mkimage_ab.sh,差异包需保存素材包;

3.调试优先抓Log,重点排查校验、分区、Loader三大类问题;

4.AB系统需注意双分区切换与回滚机制,避免升级变砖。

掌握以上内容,即可高效完成RK平台OTA升级开发,实现设备的稳定迭代。


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

    关注

    5209

    文章

    20656

    浏览量

    336995
  • 调试
    +关注

    关注

    7

    文章

    653

    浏览量

    35879
  • OTA
    OTA
    +关注

    关注

    7

    文章

    630

    浏览量

    38440
  • Rockchip
    +关注

    关注

    0

    文章

    92

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    说起OTA我们应该都不陌生,它是种可以为设备无损失升级系统的方式,能将新功能远程部署产品上。我们不仅可以通过网络下载OTA
    的头像 发表于 04-20 08:01 3089次阅读
    技术帖 | <b class='flag-5'>RK</b>3568<b class='flag-5'>开发</b>板的<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>教程

    RK3568开发OTA升级

    包下载到SD卡或U盘后,再对设备进行本地升级。 本文将基于飞凌嵌入式RK3568开发板,详细介绍OTA升级的流程,特别是本地
    的头像 发表于 04-21 14:32 1749次阅读
    <b class='flag-5'>RK</b>3568<b class='flag-5'>开发</b>板<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>

    基于RK3288嵌入式板卡 Android7.1档索引资料分享

    基于RK3288嵌入式板卡 Android7.1档索引资料分享作为直在开发板方面做研究测试的开发
    发表于 05-18 10:28

    飞凌RK3399平台Android镜像版本升级的两种处理方式-OTA 本地升级OTA远程升级

    3399平台android镜像版本升级的两种方式OTA 本地升级OTA远程升级以及
    发表于 12-17 15:16

    RK3399平台Android镜像版本升级的两种处理方式-OTA 本地升级OTA远程升级

    3399平台android镜像版本升级的两种方式OTA 本地升级OTA远程升级以及
    发表于 12-18 13:14

    RK3399平台Android镜像版本升级的两种处理方式-OTA 本地升级OTA远程升级

    3399平台android镜像版本升级的两种方式OTA 本地升级OTA远程升级以及
    发表于 12-19 16:47

    RK3399平台Android镜像-OTA 本地升级OTA远程升级

    3399平台android镜像版本升级的两种方式OTA 本地升级OTA远程升级以及
    发表于 08-11 10:00

    RK3399平台OTA升级包编译过程是怎样的

    RK3399平台升级方式有哪几种呢?RK3399平台OTA
    发表于 03-08 06:20

    iTOP-RK3568开发OTA升级包编译

    本节我们将编译三个版本的 android 镜像,V1.0.0 版本、V1.0.1 版本、V1.0.2 版本,其中V1.0.0 版本为基础版本用于烧写到 rk3568 开发板上,V.1.0.0 升级到
    发表于 03-10 16:18

    搞定RK平台Wi-Fi/BT调试配置问题解决全攻略

    专用芯片,Wi-Fi/BT 的稳定运行直接影响产品体验。本文配置、编译、测试问题排查,手把手带你搞定 RK 平台 Wi-Fi/BT 调试
    的头像 发表于 02-09 16:57 2715次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>搞定<b class='flag-5'>RK</b><b class='flag-5'>平台</b>Wi-Fi/BT<b class='flag-5'>调试</b>!<b class='flag-5'>从</b>配置<b class='flag-5'>到</b>问题解决全攻略

    RK平台Android设备OTA升级教程:原理到U盘实操

    包” 和 “差异包” 两种升级形态,适配不同场景(如全新安装、小版本更新)。本文将从 OTA 升级包的类型与编译入手,拆解 RK 平台
    的头像 发表于 02-09 16:23 2215次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>Android设备<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>教程:<b class='flag-5'>从</b>原理到U盘实操

    深入解析RK平台GPIO驱动:原理到调试开发者必看指南

    平台上,GPIO 驱动的实现直接影响着硬件交互的稳定性与效率。本文将带你深入剖析 RK 平台 GPIO 驱动的核心逻辑、使用方法,以及对调试
    的头像 发表于 02-03 15:53 1245次阅读
    深入解析<b class='flag-5'>RK</b><b class='flag-5'>平台</b>GPIO驱动:<b class='flag-5'>从</b>原理到<b class='flag-5'>调试</b>,<b class='flag-5'>开发</b>者必看<b class='flag-5'>指南</b>

    读懂UEFI系统:应用场景RK平台开发全攻略

          在嵌入式开发领域, UEFI (统可扩展固件接口)早已不是陌生词汇。它作为传统 BIOS 的升级替代方案,凭借更强大的功能、更灵活的扩展性,正在成为嵌入式平台固件
    的头像 发表于 01-19 09:55 1514次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>读懂UEFI系统:<b class='flag-5'>从</b>应用场景<b class='flag-5'>到</b><b class='flag-5'>RK</b><b class='flag-5'>平台</b><b class='flag-5'>开发</b>全攻略

    吃透RK芯片parameter文件:基础配置开发实战,避开底层所有坑

          在嵌入式开发圈,有个 “ 隐形基石文件 ”——RK 系列芯片( RK3326 、 RK3288 、 RK3399 等)的 par
    的头像 发表于 02-05 07:07 781次阅读
    <b class='flag-5'>吃透</b><b class='flag-5'>RK</b>芯片parameter文件:<b class='flag-5'>从</b>基础配置<b class='flag-5'>到</b><b class='flag-5'>开发</b>实战,避开底层所有坑

    维护成本直降!RK3576核心板/开发OTA升级功能详解,触觉智能瑞芯微RK方案商

    触觉智能旗下瑞芯微RK3576核心板/开发板产品方案,已新增支持【OTA升级功能】。下文将为大家带来详细的RK3576OTA
    的头像 发表于 04-21 10:30 155次阅读
    维护成本直降!<b class='flag-5'>RK</b>3576核心板/<b class='flag-5'>开发</b>板<b class='flag-5'>OTA</b><b class='flag-5'>升级</b>功能详解,触觉智能瑞芯微<b class='flag-5'>RK</b>方案商