recovery调试方法

原创 2013年12月04日 14:23:31

有客户反馈不知道如何调试recovery,在这里介绍下recovery的调试方法。

1. 如何在recovery模式使用adb

在recovery模式下,init程序加载的rc文件是bootable/recovery/etc/init.rc。

service adbd /sbin/adbd recovery
    disabled

# Always start adbd on userdebug and eng builds
on property:ro.debuggable=1
    write /sys/class/android_usb/android0/enable 1
    start adbd
这里可以看到如果是在userdebug或者eng编译模式,adbd服务是启动的。执行adb shell时提示不存在system/bin/sh,因为这个时候recovery/root/system为空,并没有sh程序可执行。

虽然adb shell不能执行,但adb的其他很多命令都是能够使用的。

adb devices

adb push/pull


2. 如何增加log

在recovery的代码中能看到有两种方式添加的打印信息:printf和UI->Print。

printf输出到stdout好理解,UI->Print调用screen_ui的print函数,将信息显示在屏幕上。

void ScreenRecoveryUI::Print(const char *fmt, ...)
{
    char buf[256];
    va_list ap;
    va_start(ap, fmt);
    vsnprintf(buf, 256, fmt, ap);
    va_end(ap);

    fputs(buf, stdout);
除了显示在屏幕上,也将信息输出到了stdout标准输出。


3. 标准输出信息在哪

int
main(int argc, char **argv) {
    
    // If these fail, there's not really anywhere to complain...
    freopen(TEMPORARY_LOG_FILE, "a", stdout); setbuf(stdout, NULL);
    freopen(TEMPORARY_LOG_FILE, "a", stderr); setbuf(stderr, NULL);
static const char *LAST_LOG_FILE = "/cache/recovery/last_log";
static const char *LAST_INSTALL_FILE = "/cache/recovery/last_install";
static const char *TEMPORARY_LOG_FILE = "/tmp/recovery.log";
recovery.cpp的main函数中,最开始就将stdout的输出信息保存在了/tmp/recovery.log文件中。也就是说我们需要查看的log信息都在这里。

再看看recovery结束时做了什么

static void
finish_recovery(const char *send_intent) {
    // Copy logs to cache so the system can find out what happened.
    copy_log_file(TEMPORARY_LOG_FILE, LOG_FILE, true);
    copy_log_file(TEMPORARY_LOG_FILE, LAST_LOG_FILE, false);
    copy_log_file(TEMPORARY_INSTALL_FILE, LAST_INSTALL_FILE, false);
    chmod(LOG_FILE, 0600);
    chown(LOG_FILE, 1000, 1000);   // system user
    chmod(LAST_LOG_FILE, 0640);
    chmod(LAST_INSTALL_FILE, 0644);
将"/tmp/recovery.log"拷贝到了"/cache/recovery/last_log"。

4. 如何查看log

1)如果能使用adb,在recovery模式下就能使用adb pull出log信息

adb pull /tmp/recovery.log .\

2)即使adb服务不能使用,前一次recovery的log也会保存到cache/recovery目录下,在reboot正常进入系统后pull 出来查看。

adb pull /cache/recovery/last_log .\

cache/recovery/last_install保存的是最后一次更新的OTA包。

版权声明:本文为博主原创文章,未经博主允许不得转载。

recovery 模式下如何使用adb进行调试和抓取recovery LOG

在recovery中的init.rc中加入如下代码 export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xb...
  • zclongembedded
  • zclongembedded
  • 2013年08月21日 15:20
  • 10487

mtk Android如何调试recovery模块

通用的调试程序的步骤: 找到调试模块在系统代码中的路径; 知道代码在哪里之后就是编译代码了,即如何编译调试模块; 编译出目标文件后就要将目标文件放到机器中运行,即如何刷到机器中; 目标文件刷到机器中后...
  • lyl278401555
  • lyl278401555
  • 2016年07月11日 20:19
  • 1711

recovery怎么保存log

首先,要说明的是,我想知道或得到recovery过长的所有详细log信息。 但是log 不能保存到/data  或者 /cache  ,又不能保存到/tmp目录下, 因为下次开机的时候,/tmp目...
  • liyongming1982
  • liyongming1982
  • 2013年11月04日 22:04
  • 1691

recovery log直接输出到串口

recovery log直接输出到串口     我们在调试recovery升级的时候,我们经常需要查看recovery的log,google的原始逻辑中,recovery的log并非直接输出到串口,我...
  • csdn66_2016
  • csdn66_2016
  • 2017年06月26日 14:58
  • 1230

Android OTA升级原理和流程分析(七)---Recovery服务的核心install_package函数

Android系统Recovery工作原理之使用update.zip升级过程分析(七)---Recovery服务的核心install_package函数 转载自:http://blo...
  • ylyuanlu
  • ylyuanlu
  • 2015年03月19日 14:51
  • 3132

Android系统Recovery工作原理之使用update.zip升级过程分析

转载自  http://blog.csdn.net/mu0206mu          这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过程,来理解Androi...
  • npjocj
  • npjocj
  • 2013年10月11日 21:41
  • 26080

[RK3288][Android6.0] 调试笔记 --- Recovery log重定向

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92默认谷歌Recovery代码的log是输出到cache, rk在此基础上扩展了其功能. 支持输...
  • kris_fei
  • kris_fei
  • 2017年09月19日 10:45
  • 286

Android 的Recovery机制

Android 的Recovery机制   目录 1. 系统的启动模式 1 1.1 Android系统的启动模式 1 1.2 系统的启动模式 2 2. Recovery模式中的三个部分 3...
  • fengying765
  • fengying765
  • 2014年07月30日 15:57
  • 6486

mysql的恢复过程非常慢

今天同事在没有正常停止mysql5.6服务的情况下,重启了服务器,在启动mysql的时候,进程了recovery,日志如下: 2016-08-10 12:15:24 4401 [Note] Inno...
  • aoerqileng
  • aoerqileng
  • 2016年08月10日 17:38
  • 1292

DB2利用表空间备份重建数据库

对于数据库上了T级,或数十T,全库备份一次时长太长了. 如果只是数据库中一部份表空间的更新比较频繁. 可以用表空间备份频繁备份那一部份好了.其它放在全备一起,全备的备份频率可以适当降低点. 而且比较...
  • xcltapestry
  • xcltapestry
  • 2013年12月17日 21:01
  • 2051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:recovery调试方法
举报原因:
原因补充:

(最多只允许输入30个字)