news 2026/9/3 5:13:11

[Linux外设驱动详解]RK3588 U-Boot Recovery 功能详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Linux外设驱动详解]RK3588 U-Boot Recovery 功能详解

RK3588 U-Boot Recovery 功能详解

目录

  1. 概述
  2. 核心数据结构
  3. 启动模式定义
  4. Recovery 触发方式
  5. 启动模式检测机制
  6. Recovery 启动流程
  7. RockUSB 下载模式
  8. 相关文件清单

概述

RK3588 平台的 U-Boot Recovery 功能是 Android 系统恢复机制的重要组成部分。它支持通过多种方式进入 recovery 模式,包括 BCB (Bootloader Control Block)、reboot 命令、环境变量和按键组合等。

主要特性

  • 支持多优先级的启动模式检测
  • 兼容 Android A/B 系统
  • 支持 RockUSB 升级/下载模式
  • 支持 FIT 镜像格式的 recovery 启动
  • 支持热键触发进入 recovery

核心数据结构

bootloader_message 结构

定义在 boot_rkimg.h:

structbootloader_message{charcommand[32];// 启动命令,如 "boot-recovery"charstatus[32];// 状态信息charrecovery[768];// recovery 命令参数charstage[32];// 阶段字符串(多阶段安装包)charslot_suffix[32];// A/B 系统槽后缀 (_a/_b)charreserved[192];// 保留字段};

该结构存储在 misc 分区中,用于在 bootloader、kernel 和 recovery 系统之间传递启动信息。


启动模式定义

enum _boot_mode

定义在 boot_rkimg.h:

enum_boot_mode{BOOT_MODE_NORMAL=0,// 正常启动BOOT_MODE_RECOVERY,// Recovery 模式BOOT_MODE_BOOTLOADER,// Fastboot 模式BOOT_MODE_LOADER,// Rockusb 下载模式BOOT_MODE_CHARGING,// 充电模式BOOT_MODE_UMS,// USB 大容量存储模式BOOT_MODE_BROM_DOWNLOAD,// BootROM 下载模式BOOT_MODE_PANIC,// Panic 重启BOOT_MODE_WATCHDOG,// 看门狗重启BOOT_MODE_DFU,// DFU 下载模式BOOT_MODE_QUIESCENT,// 静默模式BOOT_MODE_UNDEFINE,// 未定义};

Boot Mode 寄存器定义

定义在 boot_mode.h:

#defineREBOOT_FLAG0x5242C300// 高24位标签#defineBOOT_NORMAL(REBOOT_FLAG+0)#defineBOOT_LOADER(REBOOT_FLAG+1)// Rockusb 模式#defineBOOT_RECOVERY(REBOOT_FLAG+3)#defineBOOT_PANIC(REBOOT_FLAG+7)#defineBOOT_WATCHDOG(REBOOT_FLAG+8)#defineBOOT_FASTBOOT(REBOOT_FLAG+9)#defineBOOT_CHARGING(REBOOT_FLAG+11)#defineBOOT_UMS(REBOOT_FLAG+12)#defineBOOT_DFU(REBOOT_FLAG+13)#defineBOOT_QUIESCENT(REBOOT_FLAG+14)#defineBOOT_BROM_DOWNLOAD0xEF08A53C

Recovery 触发方式

1. 通过 Android BCB (Bootloader Control Block)

BCB 存储在 misc 分区中,offset 可以是 0KB (Google 标准) 或 16KB (Rockchip)。

// 在 misc 分区写入 "boot-recovery" 命令android_bcb_write("boot-recovery");

2. 通过 reboot 命令

系统层可以通过写入 boot mode 寄存器触发:

writel(BOOT_RECOVERY,(void*)CONFIG_ROCKCHIP_BOOT_MODE_REG);do_reset(NULL,0,0,NULL);

用户层命令:

rebootrecovery

3. 通过环境变量

U-Boot 环境变量reboot_mode

setenv reboot_mode recovery saveenv reset

4. 按键触发

在 hotkey.c 中定义的热键支持:

#defineCTRL_F0x06// fastboot mode

启动模式检测机制

rockchip_get_boot_mode()

核心函数定义在 boot_mode.c:

introckchip_get_boot_mode(void){staticintboot_mode[]={-EINVAL,-EINVAL,-EINVAL};// PH, PM, PLstaticintbcb_offset=-EINVAL;uint32_treg_boot_mode;char*env_reboot_mode;intclear_boot_reg=0;intrecovery_msg=0;// 1. 优先检查环境变量env_reboot_mode=env_get("reboot_mode");if(env_reboot_mode){if(!strcmp(env_reboot_mode,"recovery-key"))returnBOOT_MODE_RECOVERY;if(!strcmp(env_reboot_mode,"recovery-usb"))returnBOOT_MODE_RECOVERY;if
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 12:24:05

YOLO训练任务排队?抢占式GPU资源调度策略

YOLO训练任务排队?抢占式GPU资源调度策略 在工业视觉系统日益智能化的今天,一个看似简单的模型训练请求,可能正卡在长长的队列中等待数小时——而与此同时,产线却因新型缺陷频发亟需新模型上线。这种“一边是火焰,一边…

作者头像 李华
网站建设 2026/9/3 0:45:35

基于Java+SpringBoot的个人健康管理系统的设计与实现(源码+讲解视频+LW)

本课题聚焦个人健康数据追踪与管理痛点,设计并实现一款基于JavaSpringBoot的个人健康管理系统,解决传统健康管理中数据记录零散、健康状态难监测、饮食运动规划无序、体检报告易丢失等问题,搭建个性化、数字化的个人健康管理平台。系统采用前…

作者头像 李华
网站建设 2026/9/3 2:35:00

YOLO目标检测API按token计费,灵活又省钱

YOLO目标检测API按token计费,灵活又省钱 在智能制造车间的视觉质检线上,一个摄像头每秒捕捉上百张电路板图像,系统需要实时判断是否存在焊点缺陷;而在另一端的城市交通指挥中心,成千上万路监控视频正等待分析以识别违章…

作者头像 李华
网站建设 2026/9/2 13:46:21

msidcrl40.dll损坏丢失找不到 打不开程序问题 下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/9/2 23:07:45

7款免费AI论文工具实测:1小时出初稿+真实文献,轻松搞定毕业

还在为堆积如山的文献和迟迟无法下笔的论文而焦虑吗?还在担心导师的修改意见让你陷入无限循环的“改稿地狱”吗?恭喜你,属于学术人的“懒人福音”时代已经到来! 本文将为你深度实测并解析7款顶尖的免费AI论文工具,尤其…

作者头像 李华
网站建设 2026/9/3 0:02:13

YOLO目标检测为何如此高效?深度剖析其单阶段架构优势

YOLO目标检测为何如此高效?深度剖析其单阶段架构优势 在工业质检线上,每秒有上百个零件飞速流转;在自动驾驶车辆的感知系统中,每一帧图像都必须在几十毫秒内完成处理——这些场景对目标检测算法提出了近乎苛刻的要求:不…

作者头像 李华