在Rockchip(简称RK)Android平台开发中,OTA(Over The Air)升级是实现设备软件迭代的核心方式。无论是本地卡刷升级,还是在线无缝更新,掌握OTA升级的技术细节,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查,全方位拆解RK平台OTA升级开发,附关键流程图示,助力开发者快速上手。
一、OTA升级核心逻辑:两种系统架构的差异
RK平台OTA升级需区分非AB系统与AB系统,两者的分区设计、升级流程差异显著,需针对性开发。
1.1非AB系统:传统Recovery升级逻辑
非AB系统(即传统分区系统)通过Recovery模式完成升级,核心特点是“单组分区+重启升级”,升级时设备需进入Recovery模式,暂时无法使用。
•分区设计:仅包含一套系统分区(如system、boot、vendor等),升级时直接覆盖原分区。
•升级流程:
a.生成完整OTA包(含全量系统文件)或差异包(仅含版本间变更内容);
b.将升级包放入USB/SD卡或内置存储(如/data/media/0/);
c.设备检测到升级包后重启进入Recovery模式;
d.Recovery校验升级包,覆盖原系统分区,完成后重启进入新系统。
•适用场景:对升级时效性要求不高、存储空间有限的设备(如入门级物联网设备、旧款智能硬件)。
1.2 AB系统:无缝升级逻辑
AB系统(双分区系统)通过“双组分区+后台升级”实现无缝更新,升级时设备可正常使用,重启后直接切换到新系统,核心特点是“零停机升级”。
•分区设计:所有关键分区(如boot、system、vendor)均包含A/B两组(如boot_a/boot_b、system_a/system_b),一组为“活跃分区”(当前使用),一组为“备用分区”(待升级)。
•升级流程:
a.设备在Android主系统运行时,后台下载OTA包;
b.升级程序将OTA包内容写入“备用分区”(不影响活跃分区);
c.升级完成后提示用户重启,重启时切换活跃分区(如从A组切换到B组);
d.若新分区启动失败,系统自动回滚到原活跃分区,保障设备可用性。
•适用场景:对升级体验要求高的设备(如高端智能屏、工业控制设备),需额外占用约一倍存储空间。
1.3核心逻辑对比图
二、OTA升级开发核心技巧
无论是非AB还是AB系统,OTA开发的关键在于“正确配置系统+生成合规升级包+适配升级介质”,以下是实操技巧:
2.1系统配置技巧:按Android版本适配
AB系统默认关闭,需从Android系统、U-Boot、Kernel三方面配置,不同Android版本配置差异如下:
| 配置维度
|
Android 12
|
Android 13
|
Android ≥14
|
| Android系统配置
|
1. BoardConfig.mk中设BOARD_USES_AB_IMAGE := true;2.新增recovery.fstab_AB(添加slotselect参数);3.导入AB配置并指定fstab文件
|
同Android 12,支持压缩虚拟AB(需额外设BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION := true)
|
1.直接在BoardConfig.mk中开启AB;2.压缩虚拟AB仅支持GKI版本
|
| U-Boot配置
|
芯片defconfig中添加CONFIG_ANDROID_AB=y
|
同Android 12
|
同Android 12
|
| Kernel配置
|
无需额外配置
|
无需额外配置
|
无需额外配置
|
注意:虚拟AB功能(BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE := true)会降低升级性能,非必要不开启;RK3566/3568/3588无trust分区,配置时需删除trust_a/trust_b相关项。
2.2 OTA包生成技巧:完整包与差异包
OTA包分为完整包(全量系统,适合首次升级或跨版本升级)和差异包(仅含变更内容,适合小版本迭代,体积小),生成命令需区分系统类型:
(1)完整包生成
| 系统类型
|
命令1(原生make)
|
命令2(build.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 ota(AB),避免单独烧录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:需指定python3:python3 ./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.log(AB)获取日志,重点排查“校验失败”“分区挂载错误”等关键词。
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格式支持:默认不支持NTFS的USB/SD卡,需先获取NTFS授权,再开启Kernel中NTFS配置(CONFIG_NTFS_FS=y),否则升级包无法识别。
•关键文件保存:需持久化的文件(如升级状态、配置参数),建议保存到/cache/recovery/Recovery_*路径,该路径格式化时不会被清除,避免升级中断后配置丢失。
四、常见问题与解决方案
OTA升级中常遇到“升级包无法识别”“升级失败回滚”“Loader升级失败”等问题,以下是高频问题的排查思路:
4.1升级包无法识别/校验失败
| 问题现象
|
可能原因
|
解决方案
|
| 设备未弹出升级对话框
|
1.升级包未放在根目录;2.包名不是update.zip;3. USB/SD卡未挂载
|
1.将update.zip放入USB/SD卡根目录或/data/media/0/;2.插拔USB线或重启设备触发检测;3. AB系统需用update_device.py脚本触发升级
|
| 升级包校验失败
|
1.包损坏或签名错误;2.素材包版本不匹配(差异包)
|
1.重新生成OTA包,确保签名密钥正确(默认key路径:Android 13为device/rockchip/common/security/testkey,其他版本为build/make/target/product/security/testkey);2.差异包需确保基于前一版本素材包生成
|
4.2 AB系统升级回滚
| 问题现象
|
可能原因
|
解决方案
|
| 重启后回滚到原系统
|
1.备用分区写入错误;2.分区切换配置错误
|
1.查看update_engine.log,排查“写入失败”原因(如分区空间不足);2.检查U-Boot中CONFIG_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.zip;2.执行命令: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升级开发,实现设备的稳定迭代。
- 随机文章
- 热门文章
- 热评文章
- 超120Tbit/s!我国创下普通单模光纤实时传输速率新的世界纪录
- 金价“疯”涨之谜 金价走势与实际利率“背离”
- 嘉银科技:金融科技助推金融业务全流程数智化转型
- 题材股调整 沪指退守3000点关口 “中字头”个股成资金“避风港”
- 中央汇金再次大买3只ETF?买入金额至少近1400亿元
- 韩国就岸田文雄向靖国神社献祭品深表失望和遗憾
- 知名基金经理最新动向曝光:朱少醒一季度大调仓,谢治宇重仓买入这些个股
- 瑞银将A股和港股评级上调至“增配” A50指数迎利好
- 故宫:“五一”假期未成年人团队可快速预约、检票
- 日银周五料维持利率不变,可能在夏季或秋季加息
- 中信保诚人寿管理层再生变 董事长、总经理职位均空缺
- “五一”假期机票价格飙升 杭州飞云南、海南等热门城市5月2日出发便宜很多
- 走进上飞院,学习“大飞机精神”――上海人寿组织中高级管理人员及党员骨干赴中国商飞参观学习
- 1“赛事+”提升城市“流量” 陕西商洛拓经济发展新“赛道”
- 2“五一”临近 持基过节的投资者要注意这几点
- 3华发股份:成功入选“人民优选”品牌 五一黄金周热销30亿
- 4钟鼓楼老街区的古都新事
- 5非常危险!女子摔成粉碎性骨折!又是因为洞洞鞋,夏天多人中招……
- 6金税四期试点上线,财税体制改革拉开帷幕!或有资金借道信创ETF基金(562030)逢跌进场布局
- 7到2027年产业规模达到2000亿元 浙江发布历史经典产业高质量发展计划
- 8初步数据:我国一季度经常账户顺差392亿美元
- 9IDC:24Q1全球PC出货量恢复增长 达到疫情前水平
- 10“发现山西之美”TDC旅游发现者大会举办:共话文旅新生态 邀客体验新玩法
- 11(中国新貌)“国宝”大熊猫:栖居更美境 云游更广天
- 12瑞众保险副总裁俞德本出任公司临时负责人
- 13培养工程领域专业人才 非洲首所交通大学在尼日利亚投入使用
- 1大裁员下,特斯拉两名顶级高管离职
- 2奇瑞将与欧洲高端品牌签署技术平台授权协议
- 32024中国长三角青年企业家交流大会在杭州举办
- 4雷克萨斯GX中东版 全部在售 2023款 2022款 2020款 2019款 2018款成都远卓名车雷克萨斯GX中东版团购钜惠20万 欢迎上门试驾
- 5零跑C16将搭载中创新航磷酸铁锂电池
- 6Q1净利微增7%,宁德时代股东总数较2023年年末减少10728户
- 7哪吒,需要背水一战
- 8“新”中有“机”!创新服务承接新流量 撬动消费升级
- 9非创始版SU7何时交付 小米:工厂生产爬坡 全力提高产能
- 10央媒评卧铺挂帘:谁买的票谁做主
- 11江西南昌首部“多规合一”国土空间总体规划获批
- 12方程豹旗舰硬派越野!豹8正式亮相:仰望U8“青春版”登场
- 13583家族/造型霸气 方程豹豹8量产版发布



