博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android recovery支持adb shell
阅读量:7282 次
发布时间:2019-06-30

本文共 2954 字,大约阅读时间需要 9 分钟。

Android recovery支持adb shell

 

近期开发过程注意到recovery不支持adb shell。为了便于调试方便,决定添加此功能。

 

刚開始我们採用的是user版本号系统,进入recovery后,输入adb shell命令。提示“error: no devices/emulators found”。我们先确认recovery.img是否包括有adb,看out\debug\target\product\xxx\recovery\root\sbin是否有adb文件(源码\system\core\adb),然后检查\bootable\recovery\etc\init.rc下关于adbd

service adbd /sbin/adbd--root_seclabel=u:r:su:s0 --device_banner=recovery   disabled   socket adbd stream 660 system system   seclabel u:r:adbd:s0 # Always start adbd on userdebug and engbuildson property:ro.debuggable=1   write /sys/class/android_usb/android0/enable 1   start adbd # Restart adbd so it can run as rooton property:service.adb.root=1   write /sys/class/android_usb/android0/enable 0   restart adbdwrite/sys/class/android_usb/android0/enable 1

从上面可知init.rc 中adbd 是配置的,disabled 表示开机不启动,如  ro.debuggable 被置为1。那么adb 就会开启,或是service.adb.root设置为1,则重新启动adbd。

 

ro.debuggable 在\build\core\main.mk以下的内容赋值

ifeq (true,$(strip$(enable_target_debugging)))  #Target is more debuggable and adbd is on by default ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1

enable_target_debugging 在\build\core\main.mk以下的内容赋值:

## user/userdebug ## user_variant := $(filter useruserdebug,$(TARGET_BUILD_VARIANT))enable_target_debugging := truetags_to_install :=ifneq (,$(user_variant))  #Target is secure in user builds. ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1  ifeq ($(user_variant),userdebug)    #Pick up some extra useful tools   tags_to_install += debug     #Enable Dalvik lock contention logging for userdebug builds.   ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500 else    #Disable debugging in plain user builds.   enable_target_debugging :=     #Add for testUsbDebugging()   ADDITIONAL_DEFAULT_PROPERTIES += ro.adb.secure=1  Endif…Endif

可知默觉得enable_target_debugging := true,依据user_variant的值假设为user。则enable_target_debugging :=。这又和TARGET_BUILD_VARIANT有关,此变量相应于VARIANT_CHOICES=(user userdebug eng)中的一个值。由我们来选择,相关的实如今\build\envsetup.sh中。

 

依据上面可知。编译时假设选择userdebug或是eng。则ro.debuggable=1。以下我们选择eng版本号编译recovery.img。进入recovery后,输入adb shell命令。提示:

Exec ‘/system/bin/sh’ failed:No such fileor directory(2)

表示没有sh这个文件。无法进入shell,检查ramdisk 文件系统 system 文件夹为(out\debug\target\product\xxx\recovery\root\system)空。但我们知道boot.img下是能够的,看\system\core\rootdir\init.rc检查boot.img 启动的init.rc 关于sh的

service console /system/bin/sh   class core   console   disabled   user shell   group shell log   seclabel u:r:shell:s0 on property:ro.debuggable=1start console

可知是启动了sh这控制台的。所以须要在bootable\recovery\etc\init.rc添加相应的内容:

 

图1

我们知道out\debug\target\product\xxx\recovery\root\system下没有bin文件夹(当然也没有sh),所以须要在编译的时候创建。须要\build\core\Makefile添加创建文件夹和把out文件夹下的/system/bin/sh复制到out/recovery/system/bin文件夹下

 

图2

但这样还是不行,后来知道recovery可运行文件是静态编译的。之所以这样是由于recovery模式中没有共享库还有缺动态链接库载入器(/system/bin/linker,Android动态连接器linker与静态连接器ld)。

 

所以\external\mksh\Android.mk

图3

參考链接:

Android recovery.img 支持adb shell

 

[IMX6Q][Android5.1]移植笔记 --- Recovery mode的shell功能实现(sh+toolbox)

 

Android Recovery 支持 Adb

 

你可能感兴趣的文章
TeamView修改ID
查看>>
DevExpress v18.1新版亮点——WPF篇(五)
查看>>
轻松解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码
查看>>
nagios监控mysql主从
查看>>
算法_求两个整型数的最大公约数最小公倍数
查看>>
《软件开发这点儿事儿 软件开发工具手册》 - 书摘精要
查看>>
实现HTTPS系列第二弹之【非对称加密,公钥私钥,数字签名,OpenSSL及HTTPS等概念简介】...
查看>>
C++头文件多次包含 变量,函数重定义解决方案
查看>>
WSFC2012R2滚动升级至WSFC2016
查看>>
Android版手机qq 图片名和qq号码的联系规则
查看>>
OpenLDAP schema导入注意事项
查看>>
Apache不指定记录文件日志
查看>>
asp导出记录到execl/csv
查看>>
Data Structures and Algorithms in Python:Python中的数据结构和算法
查看>>
Docker大行其道—初识
查看>>
Python 守护进程
查看>>
CentOS 6.0 下 VNC 配置方法
查看>>
linux 所有命令不能用
查看>>
Android开发之 。。各种Adapter的用法
查看>>
astyle使用基础教程
查看>>