Android Recovery运行流程主要涉及系统恢复、更新等功能的执行,它是基于Android系统的紧急恢复程序。MTK(MediaTek)是智能手机和移动设备常用的芯片解决方案提供商,而8217平台则是其产品线中的一款芯片。Recovery模式允许用户对设备进行重置、更新固件或安装刷机包等操作,它是Android系统不可或缺的部分。 在MTK 8217平台上,Recovery的运行流程从board.c开始,进而调用start_armboot(),进入check_recovery_mode()函数来检查是否需要进入Recovery模式。若检测到触摸屏被按下,就会设置Recovery环境变量,将设备引导至Recovery模式。在此模式下,会通过setenv()函数设置bootcmd环境变量,让系统在启动时执行CONFIG_RECOVERY_BOOTCMD命令。 Recovery模式与正常启动模式在uboot和kernel阶段基本相同,区别在于传入kernel的ramdisk压缩包。Recovery模式使用的是recovery.gz,而正常模式使用的是ramdisk.gz。这两个压缩包是由genram.sh和genrecovery.sh脚本生成的,它们分别打包了不同的root.tar文件,从而使得启动的root文件系统有所区别。 Recovery环境下启动的init.rc文件,即init_for_recovery.rc,与正常启动下的init.rc有所不同。它会挂载sd和usb在不同的位置,创建的目录更少,加载的内核模块更少,服务也更简化。核心服务recovery的命令仅仅是一个简单的:servicerecovery/sbin/recovery。这表明Recovery服务的启动本质上是启动了一个简单的recovery命令。 Recovery的启动服务主要代码位于/android4.2.2/bootable/recovery/*目录下的recovery.cpp文件中。这个文件定义了Recovery的主要行为,包括根据cache/recovery/command参数擦除SD卡或cache数据等。而显示UI和画面配置则是通过screen_ui.cpp文件来实现的。 进入Recovery服务的Main()函数后,会首先通过get_args()函数获取传递的启动参数。接着,会重定义log输出文件,将log输出到/cache/recovery/log目录下。这种设计可以保证Recovery过程中的日志信息被正确记录,便于问题的追踪和调试。 Recovery与Bootloader以及主系统之间的通信主要通过系统的misc分区来完成。misc分区的大小只有3页(Page)。misc分区的数据结构由bootloader_message定义,其中包含command、status和recovery三个字段。command字段存储启动命令,用于决定系统是进入Recovery模式、更新firmware模式还是正常启动模式。status字段记录更新结果,而recovery字段则存放Recovery模块的启动参数,以字符串形式存储,命令之间以换行符"\n"分隔。 获取bootloader_message的方式主要有两种:一种是读取misc分区中的命令到boot变量中,另一种是如果无法从misc分区读取,则会尝试使用其他方式来获取命令。 Recovery环境下的启动流程中,还会涉及到对Recovery环境变量的设置,包括设置启动命令、日志文件路径等,以确保Recovery能够正确地根据用户选择来执行相应的恢复或更新操作。 Android Recovery运行流程涉及到多个组件和步骤,包括启动检测、环境变量配置、内核命令设置、服务启动以及用户界面显示。理解这一流程对于开发者来说非常重要,它不仅能够帮助他们处理设备恢复和系统升级问题,也对于定制化Android系统以及开发相关的Recovery工具提供了基础。
- 粉丝: 243
- 资源: 24
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助