Recovery启用Adb

reference:http://blog.csdn.net/loongembedded/article/details/67638687

进入recovery后,输入adb shell命令,提示:
Exec ‘/system/bin/sh’ failed:No such fileor directory(2)

需要在bootable/recovery/etc/init.rc增加相应的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
diff --git a/recovery/etc/init.rc b/recovery/etc/init.rc
index c7419c3..88d94af 100644
--- a/recovery/etc/init.rc
+++ b/recovery/etc/init.rc
@@ -101,8 +101,19 @@ service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
socket adbd stream 660 system system
seclabel u:r:adbd:s0

+# wilber {
+service console /system/bin/sh
+ class core
+ console
+ disabled
+ user shell
+ group shell log
+ seclabel u:r:shell:s0
+# wilber }
+
# Always start adbd on userdebug and eng builds
on property:ro.debuggable=1
+ start console
write /sys/class/android_usb/android0/enable 0
write /sys/class/android_usb/android0/idVendor 0E8D
write /sys/class/android_usb/android0/idProduct 0c01

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

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/core/Makefile b/core/Makefile
index 98f92e4..33f2aa7 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -996,6 +996,8 @@ endif
$(hide) -cp $(TARGET_ROOT_OUT)/init.recovery.*.rc $(TARGET_RECOVERY_ROOT_OUT)/
$(hide) cp -f $(recovery_gzip) $(TARGET_RECOVERY_ROOT_OUT)/sbin/gzip
$(hide) cp -f $(recovery_binary) $(TARGET_RECOVERY_ROOT_OUT)/sbin/
+ $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/system/bin
+ $(hide) cp -r $(PRODUCT_OUT)/system/bin/sh $(TARGET_RECOVERY_ROOT_OUT)/system/bin/
$(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/res
$(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/*
$(hide) cp -rf $(recovery_resources_common)/* $(TARGET_RECOVERY_ROOT_OUT)/res

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

所以external/mksh/Android.mk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
diff --git a/mksh/Android.mk b/mksh/Android.mk
index 2d572bd..d4517dd 100755
--- a/mksh/Android.mk
+++ b/mksh/Android.mk
@@ -30,7 +30,11 @@ LOCAL_SRC_FILES := \
src/lex.c src/main.c src/misc.c src/shf.c \
src/syn.c src/tree.c src/var.c

-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+# wilber add recovery adb support {
+# LOCAL_SYSTEM_SHARED_LIBRARIES := libc
+LOCAL_STATIC_LIBRARIES := libc
+LOCAL_FORCE_STATIC_EXECUTABLE := true
+# wilber }

LOCAL_C_INCLUDES := $(LOCAL_PATH)/src

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wilber_bai@hotmail.com

文章标题:Recovery启用Adb

文章字数:485

本文作者:风沉殇史

发布时间:2017-12-12, 12:12:12

最后更新:2020-01-03, 17:32:53

原始链接:http://wilber.win/posts/f725c8be/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏