android recovery 系统代码分析 -- 选择进入

Android 系统-进入recovery的问题集 一、介绍 recovery 二、进入recovery的问题集 1.关于触发拯救模式,导致机器进入recovery。 拯救模式又称救援模式,是Android 8.0新增的一个功能,它的功能介绍可以参见网络上的很多介绍文章,本文只关注问题分析。 问题场景如下:进入隐私空间,长按控制中心的移动数据按钮,此时Phone进程报停,还有一定的几率进入recovery。 分析如下: 隐私空间:Android版本为Android 11,实现的隐私空间功能的方式是创建一个新USER,来达成该需求(有兴趣的可 阅读详情

最近做Recovery的规范及操作指导文档,花了一些时间将流程搞清。

Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。而在进入Recover前面其实还有升级检测,数据下载,启动检查等等操作。系列文章将会将整个流程梳理清楚。

1、Android启动流程

简要的流程图示,升级到新的版本或指定版本:


系统上电时的详细检测流程图:


下面我们从代码的情况简略分析一下:

机顶盒上电一般都是从地址 0x00000000 处开始启动,此时启动的程序叫 boot ,在linux上使用最多一般是 Uboot ,我们找到main函数:

Start.s文件:

.globl _start
_start:
b reset

做一些 bootstrap_check --> bootstrap --> check_boot_mode  etc 

最后:

ldr pc, _start_armboot  @ jump to C code 

跳转到C代码,类似就是main函数

void start_armboot (void)   首先做一些各种各式的硬件初始化,如 arch_cpu_init 、 board_init、interrupt_init、env_init 等

然后做一些开机启动的画面显示(开机动画也可以在此做)--> load_recovery() 这里就是决定是进行 Recovery 还是进行 Normal 的开机流程最重要入口函数

void load_recovery(void){

if (!strcmp(boot_select(), "kernel"))   // 进入检测参数ng
return;

check_buttom_recovery(&keycode)

        if(keycode == RECOVERY_KEY){  // 确认有长按键强制升级

              load_recovery_image();

        }

}

如何检测参数呢?参考的信息从哪里来,这里就有必要引入分区概念了。这里使用的都是 NAND FLASH ,对于其管理可以参考如下文章:

http://blog.youkuaiyun.com/andyhuabing/article/details/7824001

下列给出一个常用的android上分区表图:(常见的分区表,可根据项目另行修改大小及分区情况)



需要注意的是: NAND Flash 分区占用必须以 block size 为单位,并且要考虑分区的差错,坏块,建议容错块 30%,最小2个容错块。所以如果定义访问者有多个用户情况下,读取与写数据保持一致情况下,定义数据结构,预留30%分区空间,进行整个分区的读和写,这样子可以省去关注坏区情况,简化上层逻辑操作。


对于如何选择是启动正常的 "kernel "还是 "recovery",就是读取 misc 分区中的内容根据情况决定启动哪个。核心代码如下:

const char *boot_select(void)
{

HI_Flash_OpenByName("MISC");

        HI_Flash_Read(h,offset,buf,len);

        memcmp(buf,"boot-recovery",..); 还是 memcmp(buf,"kernel",..);


return "kernel" / "recovery";

}


另个一种模式就是长按键强制选择:

static int check_buttom_recovery( HI_U32 *keyvalue)
{

       HI_KEYLED_Open()

        HI_KEYLED_GetValue(&u32PressStatus, &u32KeyValue);

        while(u32KeyValue == RECOVERY_KEY){

                  udelay(1000);

                  if (s32Cnt >= MAX_KEY_PRESS_COUNT)
break;

                  s32Cnt++;

        }

}


ok, 开机启动选择进入的模式流程基本搞定。下一遍进行 Recovery 代码继续分析。


Android Recovery车机系统在使用中进入到这模式怎么办 Android Recovery 阅读详情

相关推荐

android recovery模式支持ADB SHELL

项目上安卓系统在升级时,经常有不成功的情况,想看下recovery下的情况,recovery下adb shell又用不了,如是决定把adb shell功能加上,下次OTA出问题时好定位。 安卓8.1系统,在debug模式下,有启动adbd服务,可以运行adb pull, adb reboot 等操作,但不能执行adb shell。修改涉及到二个部分,第一部分不管debug模式还是user模式,都启动adbd服务;第二部分是完善recoery的文件系统,我加了sh和busybox。 (一)启动adbd服务

绿咖啡专栏 2831

android recovery 主系统代码分析

阅读完上一篇文章: http://blog.youkuaiyun.com/andyhuabing/article/details/9226569  我们已经清楚了如何进入正常模式和Recovery模式已有深刻理解了,假设进入了Recovery模式,那么其核心代码是怎么做的呢? 代码路径在 android 源码的根路径: bootable\recovery 其入口文件就是 recovery.c 中

andyhuabing的专栏 3万+

Android Recovery 的代码分析

1、调用main函数 在gingerbread/bootable/recovery/recovery.c最下面有个main(),这是recovery应用的主入 口,当编译recovery的时候,会生成一个名为recovery的可执行文件,我这边是放在out/目录下recovery/文件系统的/sbin目 录下,调用recovery可执行文件时会传入参数,这些参数就是main函数的参数,如下

andy_android的专栏 2062

Android Recovery OTA升级(一)—— make otapackage

文件夹 文件夹 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage SignOutput 总结 概述 make otapackage是Android Build系统支持的命令。用来生成Recovery系统能够进行升级的zip包。因此...

weixin_34149796的博客 463

Android 14.0 进入recovery模式(等待用户选择recovery模式界面)进入自动恢复出厂设置模式

在14.0的系统ROM产品定制化开发中,由于产品硬件有按钮,按钮执行恢复出厂设置功能,需要实现自动恢复出厂设置的功能,这就需要去掉等待输入recovery模式的相关代码,改成默认恢复出厂模式就实现这个功能了

安卓兼职framework和app工程师的博客 1510

Android下按键进入recovery模式

通过按下某个按键,使android进入recovery模式,是很好的参考资料

Android OTA升级(非A/B系统)

包括:OTA介绍,OTA差分包制作,Android系统分区,Android启动流程,Android Recovery模式介绍。 详情请见云笔记:https://note.youdao.com/s/Vy5ubsof 每日语录:今年是转折的一年,我也正式从App开发步入了Framework开发。这是新的旅程,对于这条路,有很多未知,但是更多的是兴奋。对知识的渴望大于恐惧。踏入的时候,就深感自己的无知。之前做app的时候,一个bug就是一个bug,解决了就解决了,不会牵扯太多。但是现在,一个bug经常花上俩三

androidzmm的博客 848

北京途游游戏后端开发面经

北京途游游戏后端开发面经 我面试岗位是基于Python的后端开发工程师,主要是搞游戏的服务器开发。面试一共分了两轮,之后说是看看其他的候选人再定,感觉凉凉~~ 由于受到此次新型冠状病毒疫情的影响,本次面试采用视频面试的方式,下面是面试的时候面试官提的问题,python的基础知识还是问的比较多的。  一面:(32分钟微信视频)  简单做下自我介绍,   1.说一下你开发过的项目,挑一个说下你都做了...

weixin_45603043的博客 2124

Android系统分析—OTA升级

Android系统分析—OTA升级1. recovery1.1 升级流程2. 辅助功能2.1 ui.cpp2.2 screen_ui.cpp2.3 default_device.cpp2.4 roots.cpp2.5 bootloader.cpp2.6 verifier.cpp2.7 install.cpp2.8 adb_install.cpp3. updater进程4. applypatch5. 其他辅助库6. RecoverySystem 1. recovery   recovery的源代码在boota

一只立志于养老婆的程序猿 4677

开源PACS系统Orthanc(DICOM服务器)配置

PACS(Picture Archiving and Communication System)是医学影像的数字化存储、检索和传输系统,用于管理和存储医学图像和相关信息,如放射学、核医学、超声、病理学等各种医学影像。PACS系统通过数字化技术取代了传统的胶片方式,使医疗机构能够更高效地存储、传输和查看医学图像,从而提高了医疗图像的管理和工作流程。

qq_42231043的博客 6248

基于PID的定速巡航控制系统设计【MATLAB源码+Word文档】

本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统,它能让驾驶者在高速或长途驾驶时,设定一个固定的车速,然后车辆会自动维持这个速度行驶,无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳,同时也提高了行驶的安全性。PID定速巡航控制系统是一种利用比例(Proportional)、积分(Integral)和微分(Derivative)控制算法来实现车辆定速巡航的先进系统。这种系统能够根据设定的速度,自动调整油门开度或制动力度,使车辆保持恒定的速度行驶。这种控制系统具有响应速度快、控制精度高、稳定性好等优点。

weixin_761237174的博客 1667

OTA升级 之 Recovery模式

OTA升级 之 Recovery模式

u011337503的专栏 1251

PuTTY使用方法

PuTTY是一款开源SSH/Telnet客户端,主要用于Windows系统连接Linux服务器。使用步骤包括:下载安装PuTTY,输入服务器IP和端口(默认22),可选择保存会话配置。支持密码和SSH密钥认证(需转换.pem为.ppk格式)。首次连接需确认主机密钥,成功登录后可执行Linux命令。其他功能包括会话日志记录、X11转发和端口隧道配置。操作完成后输入exit断开连接。

特网云计算 3144

android recovery 系统代码分析 -- 选择进入【转】

本文转载自:http://blog.youkuaiyun.com/andyhuabing/article/details/9226569 最近做Recovery的规范及操作指导文档,花了一些时间将流程搞清。 Android利用Recovery模式,进行恢复出厂设置,OTA升级,patch升级及firmware升级。而在进入Recover前面其实还有升级检测,数据下载,启动检查等等操作。系列文章将...

131

北斗导航 | 卫星/惯导组合导航方法

从组合导航结构方面来讲,卫星/惯导(下文以GPS/INS)组合模式一般分为三种,即松组合、紧组合和超紧组合(即深组合)。

尘世冰封的专栏 1533

Unity之Hololens2开发MRTK Profile详解

配置 MRTK 的主要方式之一是使用基础包中的配置文件。场景中的主要对象具有活动配置文件 - 一个 ScriptableObject。顶级 MRTK 配置配置文件包含主核心系统的每个核心的子配置文件数据,每个主核心系统都旨在配置其相应子系统的行为。此外,这些子配置文件也是 ScriptableObjects,因此可以包含对低它们一级的其他配置文件对象的引用。实质上,有一个包含已连接配置文件的完整树,这些配置文件构成了如何初始化 MRTK 子系统和功能的配置信息。

TxNet 1032

android 进入recovery,安卓手机如何进入Recovery模式的通用方式详解

2014-12-12 15:24:16安卓手机如何进入Recovery模式的通用方式详解标签:安卓 Recovery模式 教程Recovery模式是什么?这里说的Recovery模式主要指的是安卓的恢复刷机模式,这相当于windows系统的dos模式(不过目前只能在cmd里面找到),其实也可以称之为安卓的工程模式,在这个所谓的工程模式,安卓手机fans们可以进行若干操作,包括并不限于重启手机,...

weixin_29582621的博客 5295

【花雕学编程】嵌入式破局:MimiClaw入局后,“小龙虾”AI智能体生态的竞争与未来

摘要: 2026年初,开源项目OpenClaw的爆发式增长带动AI智能体赛道迅速崛起,国内外厂商竞相布局,形成多元化的“小龙虾”生态。国外开源社区推出的嵌入式智能体MimiClaw填补了边缘设备场景空白,重塑行业竞争格局。本文系统梳理生态构成,分析云厂商(如腾讯、阿里云)、大模型厂商(如智谱、MiniMax)、硬件/OS厂商(华为)及开源独立派(有道龙虾、MimiClaw)的差异化策略,并预判未来趋势:消费级渗透加速、云边协同、IM整合及模型与Agent深度绑定。同时提醒生态存在数据泄露等高危风险,需警惕安

雕爷学编程 884

android进入recovery模式,Android关机重启至recovery安卓进入Recovery模式模式

如今比较好就是CWM-Recovery,recovery模式一般都是全英文的,大家看起来很麻烦,可能就是一头雾水,下面安卓后院就为大家整理了recovery菜单的中英文对照翻译。希望通过这个recovery介绍能够帮助到大家。首先说下进入recovery的方法:1、将手机完全关机后,按住音量键下+电源键,进入bootloader界面;2、按音量键将光标移动到recovery那一行;3、按电源键,之...

weixin_33279554的博客 6311

MIPI D-PHY TX 一致性测试实例解析 Part 02

如果测过1.3.x,并对这组测试的细节已经熟悉的前提下,1.4.x的测试将会变得轻松,因为几乎相同的测试项被用于时钟通道的数据测量。

一只豌豆象的博客 8314

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怎样进入android模式,安卓手机如何进入Recovery模式的通用方式详解

2014-12-12 15:24:16安卓手机如何进入Recovery模式的通用方式详解标签:安卓 Recovery模式 教程Recovery模式是什么?这里说的Recovery模式主要指的是安卓的恢复刷机模式,这相当于windows系统的dos模式(不过目前只能在cmd里面找到),其实也可以称之为安卓的工程模式,在这个所谓的工程模式,安卓手机fans们可以进行若干操作,包括并不限于重启手机,...

weixin_39675178的博客 2049

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

安卓手机Recovery概述和原理分析

安卓手机Recovery概述 1、Recovery是用户想要刷机的过程中经常会遇到的一个词。那么什么是Recovery?Recovery模式又是什么意思?手机怎么进入Recovery模式? 2、Recovery的字面意思是恢复、复原。对于手机来说,Recovery就是安卓的手机提供的一种可以对手机内部的数据或系统进行修改的模式,类似于windowsPE或DOS。在手机进入Recovery后,...

$好记性还是要多记录$ 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android平板进recovery,recovery模式进不去正确进入方法详解

很多新手网友第一次刷机的时候不知道怎么进入recovery模式,还有些网友recovery模式进不去,那么如何才能正确的进入呢?小编下面就给大家整理了目前大多数安卓手机的recovery模式多种进入方法,希望可以帮助大家。recovery模式进入方法大全:1、三星在关机状态下同时按住【音量上】、【HOME键】、【电源键】,等待屏幕亮起后即可放开,进入Recovery模式。如图:2、HTCHTC手机...

weixin_31041583的博客 1万+
上一篇: Android RecoverSystem 类
下一篇: android recovery 主系统代码分析
andyhuabing
博客等级 码龄19年 704粉丝 165原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值