android recovery模式支持ADB SHELL

项目上安卓系统在升级时,经常有不成功的情况,想看下recovery下的情况,recovery下adb shell又用不了,如是决定把adb shell功能加上,下次OTA出问题时好定位。

安卓8.1系统,在debug模式下,有启动adbd服务,可以运行adb pull, adb reboot 等操作,但不能执行adb shell。修改涉及到二个部分,第一部分不管debug模式还是user模式,都启动adbd服务;第二部分是完善recoery的文件系统,我加了sh和busybox。

  • (一)启动adbd服务

打开/bootable/recovery/etc/init.rc ,里面有启动adbd服务,修改成始终打开,我是改成我的SDK版本为条件,其他安卓系统修改下数字27就可以了。

# Always start adbd on userdebug and eng builds
#on property:ro.debuggable=1
on property:ro.build.version.sdk=27
    write /sys/class/android_usb/android0/enable 1
    start adbd

  加了这个后,在正常模式下,adb reboot recovery 应该可以看到下面这个设备

# adb devices
List of devices attached
1bab414a        recovery

  • (二)完善文件系统

1)打开external/mksh/Android.mk,将sh修改成静态链接的可执行程序,recovery没有完整的文件系统,不能做动态链接;

#LOCAL_SYSTEM_SHARED_LIBRARIES := libc
LOCAL
### 启用Android 11 Eng版本Recovery模式下的ADB功能 要在Android 11 Eng版本的Recovery模式下启用ADB功能,可以通过修改`bootable/recovery/Android.mk`文件以及调整相关配置来实现。以下是具体方法: #### 修改`bootable/recovery/Android.mk` 在Eng版本中,默认情况下可能未开启Recovery模式下的ADB支持。需要编辑`bootable/recovery/Android.mk`文件并添加以下内容以确保ADB服务被加载到Recovery环境中[^1]: ```makefile PRODUCT_PROPERTY_OVERRIDES += \ ro.adb.secure=0 \ service.adb.root=1 ``` 这些属性的作用分别是: - `ro.adb.secure=0`: 关闭安全验证,允许未经认证的设备连接。 - `service.adb.root=1`: 确保ADB以root权限运行。 #### 编辑`init.recovery.rc` 还需要修改`init.recovery.<device>.rc`文件(通常位于`device/<vendor>/<device>/recovery/root/etc/init.recovery.<device>.rc`),以确保ADB服务能够正确启动。可以在该文件中加入如下行[^2]: ```bash service adbd /sbin/adbd class core socket adbd stream 660 root system user shell group shell log readproc audiodevice inet bt_net_bt_stack net_bt_admin net_raw wake_lock wake_unlock oneshot ``` 此部分定义了一个名为`adbd`的服务,并设置了其运行所需的权限和参数。 #### 构建系统镜像 完成以上更改之后,重新构建整个系统镜像以便应用改动。执行下列命令进行编译[^3]: ```bash source build/envsetup.sh lunch <your-eng-target> make -j$(nproc) ``` 其中 `<your-eng-target>` 是指代目标设备的具体名称,例如 `aosp_arm-eng` 或其他适合您硬件平台的目标选项。 #### 验证ADB功能 一旦新构建好的固件刷入设备后,可通过以下方式测试ADB是否工作正常: 1. **重启至Recovery Mode**: 使用指定的方法将装置引导至恢复环境; 2. **尝试连接ADB客户端**: 在PC端打开终端窗口输入下面指令观察是否有响应: ```bash adb devices ``` 如果一切顺利的话,应该可以看到所连结的装置列表里包含了当前处于Recovery状态下的那台机器。 --- ### 注意事项 尽管上述操作可以让ADBRecovery环境下运作起来,但需要注意的是这可能会带来一定的安全隐患,因为这意味着任何拥有物理访问权的人都能轻易获取Root级别的控制权。因此仅建议用于开发调试阶段而非正式发布版产品之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值