当前位置: 首页 > article >正文

rk35xx 通过recovery升级问题

Firefly 的recovery库是一个核心组件它构建了一个独立的微型 Linux 系统专门用于在设备主系统之外执行高可靠性的固件升级。简单来说它的工作流程是主系统通过命令触发将升级指令写入特定分区并重启随后引导程序U-Boot加载recovery系统最后recovery系统解析并执行升级包完成固件更新。整个流程与 Rockchip 平台深度集成主要用于实现系统级OTA升级和恢复出厂设置。 OTA 升级原理与完整流程Rockchip 平台的 OTA 升级流程可以清晰地拆分为以下几个步骤渲染错误:Mermaid 渲染失败: Parse error on line 5: .... 写入升级指令| D[misc 分区 (BCB)] A -- -----------------------^ Expecting SQE, DOUBLECIRCLEEND, PE, -), STADIUMEND, SUBROUTINEEND, PIPE, CYLINDEREND, DIAMOND_STOP, TAGEND, TRAPEND, INVTRAPEND, UNICODE_TEXT, TEXT, TAGSTART, got PS步骤 1: 升级触发与数据准备用户触发升级后升级程序 (update_engine或rkupdate) 会完成两项核心工作校验升级包首先对 OTA 包如update.img或update.zip进行签名校验确保其完整性和来源可信。写入 BCB 指令校验通过后会向misc分区的启动控制块BCB写入特定指令。其中command字段是关键通常为boot-recovery同时recovery字段会携带升级包的路径例如--update_package/udisk/update.img。这个操作就是告诉引导程序下次启动时要做什么。 关于misc分区和 BCB 结构体misc分区是一个数据中转站在用户空间通常通过文件系统节点例如/dev/block/by-name/misc进行访问。BCB 结构体的核心内容定义在bootable/recovery/bootloader.h中structbootloader_message{charcommand[32];// 如 boot-recoverycharstatus[32];// 升级进度状态charrecovery[1024];// 详细升级指令如 --update_package/sdcard/update.zip// ... 其他字段};步骤 2: 重启并进入 Recovery 模式主系统执行重启命令reboot。硬件重启控制权移交给引导程序通常是 U-Boot。U-Boot 在启动过程中会检查misc分区的 BCB 数据。若读取到command字段包含boot-recoveryU-Boot 便会根据预设配置加载recovery分区上的recovery.img镜像而不是常规的boot.img。步骤 3: Recovery 系统执行升级recovery.img被加载到内存并启动它实际上是一个包含精简内核和最小根文件系统通常基于initramfs的微型系统。其启动流程如下系统启动内核启动并挂载initramfs。第一个执行的程序通常是/init。启动核心程序init进程会根据配置文件如init.rc启动recovery主程序。recovery服务会解析 BCB 信息。调用具体执行者recovery程序会解析 BCB 中的指令识别升级包类型并调用相应的升级后端rkupdate后端专门用于处理 Rockchip 私有格式的update.img完整镜像包。update_engine后端功能更强大支持update.zip、update.img等多种包格式并兼容 A/B 分区升级。写入固件rkupdate或update_engine根据指令解析升级包文件并将其中包含的各个分区镜像如boot.img,system.img等准确地写入到 Flash 存储的对应分区中。 关键代码模块与实现分析recovery项目的源码目录通常位于bootable/recovery/。以下是其核心模块与代码实现的关键部分。1.recovery主程序流程控制中枢 (recovery.cpp)recovery程序的入口在recovery.cpp的main()函数。它会解析 BCB决定是执行升级还是显示菜单是升级流程的控制中心。// bootable/recovery/recovery.cpp (简化逻辑)intmain(intargc,char**argv){// 1. 加载并解析 BCB (Bootloader Control Block)std::string boot_command;std::string boot recovery;// ... 从 misc 分区读取数据参考 bootloader.cpp 的 get_bootloader_message_mtd// 读取到的内容会被存入结构体 struct bootloader_message// 2. 解析命令行参数例如 --update_package/path/to/package// adb 等会将这些参数写入 /cache/recovery/command// get_args() 会合并 BCB 和 /cache/recovery/command 中的参数// update_package 变量最终会包含 OTA 包的路径如 /sdcard/update.zip// 3. 根据命令执行相应操作// process_update_package(update_package) 是执行升级的核心函数if(!update_package.empty()){// 处理 OTA 升级包intstatusinstall_package(update_package);// 升级成功则重启失败则可能显示错误菜单}elseif(!wipe_data){// 显示 Recovery 主菜单ui-ShowMenu();}return0;}代码逻辑参考了 Android 原生 recovery 模块的实现方式。updater机制脚本驱动的升级逻辑当升级包为update.zip格式时recovery会启动updater程序。updater的核心是执行包内的META-INF/com/google/android/updater-script脚本该脚本使用 Edify 语言编写定义了每一步升级操作如分区擦除、文件写入等。updater-script示例# 显示进度 ui_print(Starting update...); # 擦除 system 分区 format(ext4, EMMC, /dev/block/by-name/system, 0); # 将 new_system.img 写入 system 分区 block_image_update(/dev/block/by-name/system, package_extract_file(system.transfer.list), system.new.dat, system.patch.dat); # 写入 boot 分区 package_extract_file(boot.img, /dev/block/by-name/boot); ui_print(Update completed successfully.);2.rkupdate后端Rockchip 私有格式执行者 (external/rkupdate/)rkupdate是处理 Rockchip 私有update.img固件的后端程序。update.img是一个包含多个分区镜像的集合包。rkupdate的核心功能是解析这个集合包并将每个分区镜像烧录到 Flash 的正确位置。下面是update.img解析的核心代码片段简化逻辑// external/rkupdate/rkupdate.c (简化逻辑)intdo_rkupdate(constchar*package_path){FILE*fpfopen(package_path,rb);// 1. 解析 Rockchip 固件头部 (RC4)// 读取前几个字节确认是 RC4 格式并获取头部信息intfdopen(package_path,O_RDONLY);rc4_header header;read(fd,header,sizeof(header));// 2. 循环处理每个分区镜像// 根据头部信息找到每个分区的起始地址和长度// 然后逐个分区进行烧写for(inti0;iheader.num_images;i){// 获取分区镜像的偏移和大小off_toffsetget_partition_offset(i);size_tsizeget_partition_size(i);constchar*nameget_partition_name(i);// 3. 烧写到对应分区// 调用 rkflash 相关函数写入 /dev/block/by-name/ 下的设备节点if(write_partition(name,fd,offset,size)!0){LOGE(Failed to write partition %s,name);return-1;}// 写入进度更新update_progress(...);}fclose(fp);LOGI(rkupdate completed successfully!);return0;}3.update_engine后端现代化升级方案 (external/recovery/update_engine/)update_engine是一个设计上更现代化、功能更全面的升级后端。它是一个独立的守护进程通过 D-Bus 通信采用状态机管理升级任务将升级过程抽象为IDLE-CHECKING-DOWNLOADING-UPDATING等状态。架构优势通过抽象接口PartitionWriter,FileSystem等实现了高内聚低耦合便于移植和扩展。多格式支持原生支持update.zip和update.img。update_engine的状态机迁移可以简化为IDLE - CHECKING - DOWNLOADING - UPDATING - IDLE | | | --------------------------- ERROR️ 独立实现与进阶方案除了使用 Rockchip 的官方方案嵌入式 Linux 设备还有多种构建 OTA 能力的途径。独立实现方案要独立实现一套 OTA 系统核心在于构建一个可靠、安全的升级环境。关键步骤和组件如下制作 Recovery 镜像 (recovery.img)这个镜像本身是一个独立的 Linux 系统。你可以采用以下方式构建基于 Buildroot在 Buildroot 的配置中为另一个配置 (output/recovery/) 选择最小化的 Linux 内核和 BusyBox并加入升级程序源码。BCB 操作与系统服务编写一个独立程序例如my_ota_client来操作/dev/block/by-name/misc分区用于写入和读取 BCB 指令。使用 Linux 的inotify机制或实现一个简单的守护进程来监听升级事件。引导程序适配修改 U-Boot 源码使其在启动流程中加入对misc分区的检查逻辑。这通常涉及 Rockchip 特有的reboot mode驱动。升级包生成脚本编写一套脚本用于生成最终可在设备上使用的update.img或update.zip升级包。进阶实现方案使用开源框架 (SWUpdate/RAUC/Mender)这是实现专业级 OTA 功能的主流选择。它们功能完善社区活跃可极大缩短开发周期。SWUpdate最灵活支持本地、网络等多种升级方式并可直接复用update-engine。RAUC在需要复杂的 A/B 分区更新和回滚机制的场景下架构非常清晰。Mender提供开箱即用的完整解决方案。引入 A/B (Seamless) 分区升级这是提升用户体验的关键。系统拥有两套独立分区A 和 B。升级时系统在后台更新非当前运行的那套分区完成后只需简单重启即可切换实现了真正的“无缝”升级且升级失败能自动回滚。两种方案对比维度Rockchip 官方方案开源方案 (SWUpdate 等)集成难度低与 SDK 深度集成中高需独立移植灵活性受限于 Rockchip 框架非常高可深度定制社区生态依赖 Rockchip 支持全球开发者社区活跃维护成本随 SDK 更新需要持续关注上游总的来说Firefly 的recovery库展示了 Rockchip 平台实现系统升级的标准方法其核心是围绕recovery系统这一独立环境来保证升级的高可靠性。在工程实践中如果追求快速开发和与 SDK 的深度集成Rockchip 的官方方案是首选而当项目需要更灵活的升级策略、更强的社区支持或有特定的安全要求时采用 SWUpdate 等成熟的开源框架将更具优势。

相关文章:

rk35xx 通过recovery升级问题

Firefly 的 recovery 库是一个核心组件,它构建了一个独立的微型 Linux 系统,专门用于在设备主系统之外执行高可靠性的固件升级。简单来说,它的工作流程是:主系统通过命令触发,将升级指令写入特定分区并重启&#xff1b…...

文件-语言-系统:基础IO-2.0——IO重定向接口,语言层缓冲区,系统级缓冲区。内核级分析!

bit::Shadow✧(≖ ◡ ≖✿ 目录 重定向接口dup2() ">" ">>" "<" 函数原型 输出重定向1和2的使用 文件描述符表 ./a.out运行&#xff1a; "./a.out >"默认重定向是fd 1 合并标准输入输出 缓冲区 什么是缓冲…...

基于ESP32的智能电池充电器设计:多化学体系支持与模块化架构

1. 项目概述&#xff1a;打造一台全能的“电池医生”手头攒了一堆不同化学体系的电池&#xff0c;从航模用的4S锂聚合物电池&#xff0c;到应急灯里的12V铅酸电池&#xff0c;再到各种工具里的镍氢、锂离子电池&#xff0c;每次充电都得翻出好几个不同的充电器&#xff0c;桌面…...

FT231XQ USB串口桥接板设计解析与实战应用指南

1. 项目概述&#xff1a;从FT232R到FT231XQ的USB串口桥接板演进在嵌入式开发和硬件调试的日常工作中&#xff0c;一个可靠、小巧且功能清晰的USB转串口&#xff08;UART&#xff09;桥接板&#xff08;Breakout Board&#xff0c; 简称BoB&#xff09;几乎是工程师手边的标配工…...

自制极低频电流探头:负电阻补偿原理与低频方波测量实践

1. 项目概述&#xff1a;为极低频电流测量而生在电子测试领域&#xff0c;电流探头是个再常见不过的工具&#xff0c;无论是排查开关电源的纹波&#xff0c;还是分析电机驱动的波形&#xff0c;都离不开它。但如果你尝试用市面上常见的电流探头去观察一个频率低至几赫兹&#x…...

基于MaixCam的延时摄影系统:从硬件选型到Python编程全解析

1. 项目概述&#xff1a;用MaixCam打造你的专属延时摄影工坊延时摄影&#xff0c;这个听起来有点专业、甚至带点“魔法”色彩的词&#xff0c;其实离我们并不遥远。想想看&#xff0c;把一朵花从含苞到绽放的几天时间&#xff0c;压缩成十几秒的惊艳绽放&#xff1b;或者把一座…...

基于双T振荡器的正弦波LED调光电路设计与实践

1. 项目概述&#xff1a;用双T振荡器实现正弦波LED调光最近在捣鼓一些氛围灯项目&#xff0c;总感觉用单片机PWM做的呼吸灯效果有点“硬”&#xff0c;那种线性的明暗变化看久了难免审美疲劳。于是翻出以前模拟电路的老本行&#xff0c;琢磨着能不能用纯硬件的方式&#xff0c;…...

pan-baidu-download:百度网盘多线程下载加速器架构解析与性能优化指南

pan-baidu-download&#xff1a;百度网盘多线程下载加速器架构解析与性能优化指南 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download pan-baidu-download是一款基于Python开发的百度网盘命令行下载…...

MySQL GROUP BY 原理与优化

我刚工作的时候&#xff0c;有次统计每个用户的订单总金额&#xff0c;写了 SELECT user_id, SUM(amount) FROM orders GROUP BY user_id&#xff0c;结果执行了 60 秒还没出结果。DBA 帮我一看执行计划&#xff0c;发现没走索引&#xff0c;导致 Using temporary&#xff08;用…...

【MySQL数据库 | 第一篇】 概述

数据库相关概念&#xff1a; 数据库(Database)&#xff1a;数据库是指一组有组织的数据的集合&#xff0c;通过计算机程序进行管理和访问。数据库管理系统&#xff1a;操纵和管理数据库的大型软件SQL&#xff1a;操作关系型数据库的编程语言&#xff0c;定义了一套操作关系型数…...

SMUDebugTool终极指南:如何深度掌控AMD Ryzen处理器的隐藏性能

SMUDebugTool终极指南&#xff1a;如何深度掌控AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...

转行网络安全运维:从0到1的可落地指南

转行网络安全运维&#xff1a;从0到1的可落地指南 一、 「3个核心技能&#xff1a;从零起步也能会」 网上学习资料多到爆炸&#xff0c;不用纠结“哪个最好”&#xff0c;记住一句话&#xff1a;**能学会、能上手的就是好的**&#xff01;不管是免费视频还是付费课&#xff0c…...

Owl-Alpha 新手快速上手指南

在处理大规模数据或构建高性能应用时&#xff0c;我们常常会遇到一个棘手的问题&#xff1a;如何在不阻塞主线程的情况下&#xff0c;高效地执行耗时任务&#xff1f;无论是处理图像、解析大型文件&#xff0c;还是进行复杂的数学运算&#xff0c;传统的单线程模式往往会让界面…...

配置OpenClaw Agent使用Taotoken作为后端模型提供商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 配置OpenClaw Agent使用Taotoken作为后端模型提供商 基础教程类&#xff0c;指导希望使用OpenClaw等Agent工具的开发者&#xff0c…...

中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程

中兴光猫终极管理指南&#xff1a;解锁工厂模式与Telnet权限的实战教程 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 掌握中兴光猫的设备管理和权限获取能力是网络管理员和技术爱好者…...

电子商务设计师软考备战:特别篇 - 综合模拟与备考策略

1. 考试形式与内容结构1.1 考试基本信息考试科目与时间基础知识考试&#xff1a;上午9:00-11:30&#xff08;150分钟&#xff09;应用技术考试&#xff1a;下午2:00-4:30&#xff08;150分钟&#xff09;题型与分值分布上午考试&#xff08;基础知识&#xff09;&#xff1a; -…...

WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南

WarcraftHelper&#xff1a;魔兽争霸III现代兼容性问题的终极解决方案指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经典即时战…...

基于ESP32与MQTT的家庭环境监测系统:从传感器选型到数据可视化实战

1. 项目概述与核心价值最近几年&#xff0c;我身边越来越多的朋友开始关注家里的空气质量、温湿度这些看不见摸不着&#xff0c;但又实实在在影响生活舒适度和健康的环境指标。从新装修的房子担心甲醛&#xff0c;到有老人小孩的家庭在意PM2.5和二氧化碳浓度&#xff0c;再到南…...

荣耀出征官方网站下载正版手游 翅膀养成细节玩法全方位讲解

玩荣耀出征的玩家都清楚&#xff0c;翅膀不仅是角色的颜值象征&#xff0c;更是提升整体战力的核心途径。很多新手玩家只顾着升级、刷装备&#xff0c;完全忽略翅膀养成&#xff0c;导致等级很高但战力始终上不去。还有不少玩家胡乱合成、盲目进阶&#xff0c;浪费了大量稀有翅…...

1901-2022年中国气温变化分析实战:用这份1km栅格数据我们能发现什么?

1901-2022年中国气温变化分析实战&#xff1a;如何从1km栅格数据中挖掘气候演变规律当一份覆盖122年、分辨率精确到1公里的气温栅格数据摆在面前时&#xff0c;我们看到的不仅是数字矩阵&#xff0c;更是一部写在经纬度坐标里的气候变迁史诗。这份由逐月数据聚合生成的逐年气温…...

为什么92%的团队用DeepSeek生成方案仍需人工重写?揭秘缺失的2个元认知层与1套校验协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的团队用DeepSeek生成方案仍需人工重写&#xff1f;揭秘缺失的2个元认知层与1套校验协议 当团队将DeepSeek-R1或DeepSeek-VL模型用于技术方案生成时&#xff0c;表面看响应迅速、逻辑连贯&…...

Claude端到端测试设计:从零搭建可审计、可回放、可量化的AI服务测试流水线(含开源Schema校验工具)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude端到端测试设计 端到端测试是验证Claude模型在真实用户交互链路中行为一致性的关键手段。它覆盖从原始提示输入、上下文管理、流式响应生成&#xff0c;到输出解析与业务校验的全路径&#xff0c;确保模…...

保姆级教程:Windows系统下Arcgis 10.2从下载、安装到汉化一次搞定(附常见License启动失败解决方案)

Windows系统下Arcgis 10.2完整安装与汉化实战指南第一次接触Arcgis的新手往往会被复杂的安装流程和神秘的License Manager搞得晕头转向。作为一款功能强大的地理信息系统软件&#xff0c;Arcgis在科研、城市规划、环境监测等领域有着广泛应用&#xff0c;但它的安装过程确实会让…...

光轮智能 谢晨 访谈总结机器人仿真数据产业

光轮智能 谢晨 访谈总结机器人仿真关于创始人关于数据数据金字塔数据痛点仿真数据的重要性仿真数据的质量b站链接地址公司官网关于创始人 清华物理&#xff1b;哥伦比亚金融&#xff1b;英伟达智驾仿真&#xff1b;小鹏智驾仿真&#xff1b;现为光轮智能CEO 关于数据 数据的…...

【DeepSeek架构评审功能深度解密】:20年架构师亲授3大避坑指南与5步落地 checklist

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek架构评审功能全景概览 DeepSeek架构评审功能是一套面向大模型系统设计与工程落地的自动化分析框架&#xff0c;聚焦于模型结构合理性、计算图优化潜力、内存访问模式、算子兼容性及部署约束等多维度评…...

轻量化部署,异地机房快速接入,多机房管理不用再大动干戈

随着业务拓展&#xff0c;不少企业、单位陆续建起异地分部机房、多区域节点机房。传统资产管理系统部署复杂、对接困难&#xff0c;异地机房接入成本高、周期长&#xff0c;改造繁琐&#xff0c;让很多运维团队望而却步&#xff0c;只能继续沿用分散人工管理&#xff0c;资产混…...

基于ATtiny84的智能冰箱监控器:低功耗温度与门状态监测方案

1. 项目概述&#xff1a;一个装在树莓派盒子里的智能冰箱管家如果你家里有台老冰箱&#xff0c;或者对食物储存温度特别在意&#xff0c;总担心冰箱门没关严或者突然断电导致内部升温&#xff0c;那么这个自己动手做的“冰箱看门狗”项目就太适合你了。它本质上是一个高度定制化…...

独立站内容分层:一层给 SEO,一层给 GEO

你的内容在喂两个完全不同的"阅读者" 你的博客文章&#xff0c;从来都不只有一个读者。 传统认知里&#xff0c;独立站内容的读者只有两类&#xff1a;真人访客和搜索引擎爬虫。SEO 优化的一切工作&#xff0c;本质上都是在讨好后者&#xff0c;顺带服务前者。 但…...

37家金融客户紧急启用的DeepSeek扫描辅助加固包(含未公开API调用密钥策略)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek漏洞扫描辅助的背景与战略价值 近年来&#xff0c;大模型在安全领域的应用正从辅助问答向深度协同防御演进。DeepSeek系列模型凭借其开源、高推理精度及强代码理解能力&#xff0c;成为构建智能化漏洞…...

腾讯 Marvis 初级使用教程——从安装到上手

腾讯最新系统级AI助手Marvis&#xff08;2026年5月20日发布&#xff09;&#xff0c;官网 https://marvis.qq.com&#xff0c;主打“一句话操作电脑”、跨端协同、GUI Agent执行。虽然是个【小龙虾】&#xff0c;但上手其实不难。这篇就简单写写 Marvis 的安装和基础使用&#…...