Android recovery.img 支持adb shell

原创 2016年08月31日 12:09:27
android recovery 模式下出于安全的考虑,一般禁止adb  和adb shell 登陆。如果需要在recovery  模式下debug ,会带来很大的不方便。
首先配置recovery 模式下adb 启动。检查 out/*/recovery/root/sbin  目录下是否有adbd 文件。然后检查init.rc 中是否有adb 配置:
recovery 是否开启adb:

点击(此处)折叠或打开

  1. 96 service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
  2. 97 disabled
  3. 98 socket adbd stream 660 system system
  4. 99 seclabel u:r:adbd:s0
  5. 100
  6. 101 # Always start adbd on userdebug and eng builds
  7. 102 on property:ro.debuggable=1

  8. 104 write /sys/class/android_usb/android0/enable 1
  9. 105 start adbd
  10. 106
  11. 107 # Restart adbd so it can run as root
  12. 108 on property:service.adb.root=1
  13. 109 write /sys/class/android_usb/android0/enable 0
  14. 110 restart adbd
  15. 111 write /sys/class/android_usb/android0/enable 1
在init.rc 中adbd 是配置的,disabled 表示但是开机不启动,下面的  ro.debuggable 会被置为1,那么adb 就会开启。所以编译eng 版本或者userdebug 版本,ro.debuggable 就会值1 adb 就会启动。

刷完eng 版本的recovery.img 进入recovery 模式,adb shell ,却提示 exec '/system/bin/sh' failed: No such file or directory (2) - 。没有sh. 无法进入shell. 检查ramdisk 文件系统 system 目录为空。没有sh 文件,无法进入控制台。检查boot.img 启动的init.rc 文件发现:

点击(此处)折叠或打开

  1. service console /system/bin/sh
  2. 493 class core
  3. 494 console
  4. 495 disabled
  5. 496 user shell
  6. 497 group shell log
  7. 498 seclabel u:r:shell:s0
  8. 499
  9. 500 on property:ro.debuggable=1
  10. 501 start console
  11. 502
  12. 503 # adbd is controlled via property triggers in init..usb.rc
  13. 504 service adbd /sbin/adbd --root_seclabel=u:r:su:s0
  14. 505 class core
  15. 506 socket adbd stream 660 system system
  16. 507 disabled
  17. 508 seclabel u:r:adbd:s0
开启控制台:
  1. service console /system/bin/sh

因此,在recovery 的init.rc 中添加配置:

点击(此处)折叠或打开

  1. +service console /system/bin/sh
  2. + console
  3. + disabled
  4. + user shell
  5. + group shell log
  6. + seclabel u:r:shell:s0
  7. +
  8. service recovery /sbin/recovery
  9. seclabel u:r:recovery:s0
  10. @@ -93,6 +100,7 @@ service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
  11. # Always start adbd on userdebug and eng builds
  12. on property:ro.debuggable=1
  13. + start console
  14. write /sys/class/android_usb/android0/enable 1
  15. start adbd
这样在recovery 下开启了console ,把system 下的sh 文件放到文件系统的system/bin/ 目录下,重新制作recovery. 烧机后adb shell ,无反应。在recovery模式下,二进制文件都是静态连接方式,检查sh 连接的动态库:
$  arm-linux-android-objdump -x  ystem/bin/sh | grep NEEDED  NEEDED              
   libc.so
需要动态连接libc.修改Android.mk  静态连接libc 。sh 代码在external/mksh,或者使用busybox sh, busybox 太大,这里用mksh.

点击(此处)折叠或打开

  1. diff --git a/Android.mk b/Android.mk
  2. index 9989f67..5042734 100644
  3. --- a/Android.mk
  4. +++ b/Android.mk
  5. @@ -28,7 +28,9 @@ LOCAL_SRC_FILES:= src/lalloc.c src/edit.c src/eval.c src/exec.c \
  6. src/lex.c src/main.c src/misc.c src/shf.c \
  7. src/syn.c src/tree.c src/var.c
  8. -LOCAL_SYSTEM_SHARED_LIBRARIES:= libc
  9. +#LOCAL_SYSTEM_SHARED_LIBRARIES:= libc
  10. +LOCAL_STATIC_LIBRARIES := libc
  11. +LOCAL_FORCE_STATIC_EXECUTABLE := true
重新编译,烧机,adb shell 终于可以了。
总结一下,recovery 下要支持adb shell:
1. 开启adb 支持。
2. 开启console 控制台支持。
3. sh 文件正确。









 
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1082) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
阅读全文
版权声明:本文为博主原创文章,转载请注明出处。

Android recovery支持adb shell

Android recovery支持adb shell 最近开发过程注意到recovery不支持adb shell,为了便于调试方便,决定增加此功能。 刚开始我们采用的是user版本系统,进入reco...
  • LoongEmbedded
  • LoongEmbedded
  • 2017年03月28日 16:57
  • 4824

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
  • 10657

adb 进入 recovery adb 进入 bootloader

重启到Recovery界面 adb reboot recovery 重启到bootloader界面 adb reboot bootloader
  • mldxs
  • mldxs
  • 2014年01月23日 10:38
  • 31517

深入理解Android之设备加密Device Encryption

深入理解Android之设备加密Device EncryptionAndroid从4.4开始就支持一项功能,那就是对设备进行加密。加密自然是为了安全性考虑,由于/system目录是只读的,手机里那些存...
  • Innost
  • Innost
  • 2015年03月21日 19:25
  • 51562

Android初始化语言(init.rc语法)

本文为 ANDROID_SOURCE/system/core/init/readme.txt 的译文,主要讲解Android init.rc的语法。这份文档基本说明了init进程要完成那些工作,当然,...
  • xusiwei1236
  • xusiwei1236
  • 2014年12月28日 10:50
  • 4781

recovery 升级过程执行自定义shell命令

有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下:   第一:     把我们需要执行的命令,写成一个test.sh脚本,然后...
  • csdn66_2016
  • csdn66_2016
  • 2017年06月26日 16:08
  • 584

【Android7.1.2源码解析系列】android中init.rc文件的语法

译自:system/core/init/readme.txt 译文 Android初始化语言 =================== Android 初始化语言由动作(Action)、命...
  • class_brick
  • class_brick
  • 2017年05月03日 09:57
  • 412

通过ADB命令刷入boot.img和recovery.img的方法

一个完整的官方rom解开如下所示 boot.img system.img recovery.img hboot.nb0 data.img cache.img radio.img 等等 ...
  • cdefg198
  • cdefg198
  • 2012年08月25日 21:48
  • 39545

android4.0 recovery流程详解

static const char *COMMAND_FILE = "/cache/recovery/command";    //命令文件 static const char *INTENT_FIL...
  • dkleikesa
  • dkleikesa
  • 2013年08月02日 00:15
  • 3098

recovery调试方法

有客户反馈不知道如何调试recovery,在这里介绍下recovery的调试方法。 1. 如何在recovery模式使用adb 在recovery模式下,init程序加载的rc文件是boota...
  • u011477661
  • u011477661
  • 2013年12月04日 14:23
  • 2822
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android recovery.img 支持adb shell
举报原因:
原因补充:

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