adb recovery 模式下支持adb shell

本文介绍了解决在recovery模式下无法使用adb shell的问题,通过修改init.rc文件加入shell服务,更新Makefile以复制必要的二进制文件,并调整mksh编译配置,最终实现了adb shell的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:在recovery模式下,可以使用adb devices 、adb root、adb remount、adb reboot 但是输入adb shell 提示:exec "/system/bin/sh": No such file or directory 。

解决方法:

1.在bootable\recovery\etc\init.rc增加如下内容:  开启console 控制台支持

 89 service adbd /sbin/adbd --root_seclabel=u:r:su:s0 --device_banner=recovery
 90     disabled
 91     socket adbd stream 660 system system
 92     seclabel u:r:adbd:s0
 93 
 94 service console /system/bin/sh
 95      class core
 96      console
 97      disabled
 98      user shell
 99      group shell log readproc
100     seclabel u:r:shell:s0

101 
102 # Always start adbd on userdebug and eng builds
103 on property:ro.debuggable=1
104     start console
105     write /sys/class/android_usb/android0/enable 1
106     start adbd

2.在\build\core\Makefile中增加如下内容:(copy bin 文件的内容到recovery.img中)

1213   @echo Modifying ramdisk contents...
1214   $(if $(BOARD_RECOVERY_KERNEL_MODULES), \
1215     $(call build-image-kernel-modules,$(BOARD_RECOVERY_KERNEL_MODULES),$(TARGET_RECOVERY_ROOT_OUT),,$(call intermediates-dir-for,PACKAGING,depmod_recovery)))
1216   $(hide) rm -f $(TARGET_RECOVERY_ROOT_OUT)/init*.rc
1217   $(hide) cp -f $(recovery_initrc) $(TARGET_RECOVERY_ROOT_OUT)/
1218   $(hide) cp $(TARGET_ROOT_OUT)/init.recovery.*.rc $(TARGET_RECOVERY_ROOT_OUT)/ || true # Ignore error when the src file doesn't exist.
1219   $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/res
1220   $(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/*
1221   $(hide) cp -rf $(recovery_resources_common)/* $(TARGET_RECOVERY_ROOT_OUT)/res
1222   $(hide) cp -f $(recovery_font) $(TARGET_RECOVERY_ROOT_OUT)/res/images/font.png
1223   $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/system/bin
1224   $(hide) cp -r $(PRODUCT_OUT)/system/bin/sh $(TARGET_RECOVERY_ROOT_OUT)/system/bin

1225   $(hide) $(foreach item,$(TARGET_PRIVATE_RES_DIRS), \
1226     cp -rf $(item) $(TARGET_RECOVERY_ROOT_OUT)/$(newline))
1227   $(hide) $(foreach item,$(recovery_fstab), \
1228     cp -f $(item) $(TARGET_RECOVERY_ROOT_OUT)/etc/recovery.fstab)

3.在external\mksh\Android.mk中增加如下内容:在recovery模式下,二进制文件都是静态连接方式

 80 #LOCAL_SYSTEM_SHARED_LIBRARIES := libc    (原来就有,注释掉就行)
 81 
 82 LOCAL_STATIC_LIBRARIES := libc

 83 LOCAL_FORCE_STATIC_EXECUTABLE := true

4.重新烧录recovery.img镜像文件,ok。

5.参考链接:

0.

Android recovery.img 支持adb shell

https://blog.youkuaiyun.com/makeyourprogress/article/details/74231123#commentBox

1.

Android recovery.img 支持adb shell

http://blog.youkuaiyun.com/chituhuan/article/details/52383655

2.

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

http://blog.youkuaiyun.com/kris_fei/article/details/50921384

3.

Android Recovery 支持 Adb

http://www.jianshu.com/p/a0bdcce0a5e1

<think>好的,我需要回答用户关于如何使用`adb shell recovery --wipe_data`命令的问题,以及这个命令的具体作用和注意事项。首先,我需要确认用户的需求,他们可能想通过ADB命令清除设备数据,类似于恢复出厂设置。根据提供的引用内容,用户已经找到了一些相关的信息,但需要更详细的指导和注意事项。 首先,我应该回顾引用中的信息。引用[1]和[2]提到,`recovery --wipe_data`可以擦除用户数据和缓存,并重启设备。引用[3]指出在恢复模式中选择“wipe data/factory reset”可以清除用户数据,而引用[4]提到命令可能因不同的恢复模式而有所不同,比如ClockworkMod恢复可能支持这些命令。 接下来,我需要将这些信息整合一个步骤指南。用户可能需要知道具体的操作步骤,例如如何进入恢复模式,或者直接通过ADB发送命令。根据引用,直接使用`adb shell recovery --wipe_data`可能有效,但需要注意设备是否支持该命令,因为不同的恢复版本可能有差异。 然后,关于命令的作用,需要明确说明这会清除用户数据和缓存,相当于恢复出厂设置,并且设备会重启。注意事项方面,必须强调数据无法恢复,确保设备已解锁Bootloader,以及不同恢复工具可能存在的兼容性问题。此外,还要提醒用户备份数据,避免误操作。 可能还需要检查是否有其他相关的参数或替代命令,例如`adb reboot recovery`进入恢复模式后再手动选择选项,或者使用`fastboot`命令。但根据用户的问题,他们更关注直接使用`adb shell recovery --wipe_data`,所以应聚焦于此。 最后,生相关问题时要考虑用户可能的后续疑问,比如命令无效时的处理方法,其他清除数据的方法,以及解锁Bootloader的步骤等。确保问题覆盖用户可能遇到的常见情况,帮助他们进一步解决问题。</think>### 如何使用 `adb shell recovery --wipe_data` 清除设备数据? #### 命令作用 该命令用于**擦除设备的所有用户数据(包括应用、设置、账户等)和缓存分区**,效果等同于手动执行“恢复出厂设置”操作[^3][^4]。执行后设备会自动重启。 #### 操作步骤 1. **连接设备并启用调试模式** - 在设备上启用“开发者选项”并打开“USB调试”。 - 通过USB连接电脑,使用`adb devices`验证设备是否被识别。 2. **执行清除命令** ```bash adb shell recovery --wipe_data ``` 命令执行后,设备会立即进入恢复模式并开始清除数据,完后自动重启[^1][^2]。 3. **验证结果** 重启后设备将进入初始化设置界面,表明数据已清除。 --- #### 注意事项 1. **数据不可逆** **所有用户数据将被永久删除**,包括应用、照片、文档等,操作前务必备份重要数据[^3]。 2. **恢复工具兼容性** - 该命令依赖设备的恢复模式实现,部分厂商(如华为、小米)的自定义恢复工具可能不支持此命令[^4]。 - 若命令无效,可尝试手动进入恢复模式: ```bash adb reboot recovery ``` 然后通过音量键选择“wipe data/factory reset”并确认[^3]。 3. **Bootloader状态** 部分设备需解锁Bootloader才能通过ADB执行恢复命令,否则可能报错“Permission denied”。 4. **系统分区保护** 若设备启用了“dm-verity”或“AVB 2.0”等分区验证机制,清除数据后首次启动可能耗时较长。 --- #### 替代方案 - **通过`fastboot`清除数据**(需Bootloader模式): ```bash fastboot erase userdata fastboot reboot ``` - **使用Android系统API**(需root权限): ```bash adb shell am broadcast -a android.intent.action.MASTER_CLEAR ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c_hnie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值