Android Recovery 支持 Adb

很早写过Busybox的移植, 觉得方式比较繁琐

Android Recovery 移植 Busybox

新的移植方式, 简单高效

Busybox 移植

目标: 把 busybox 编译到 /sbin 的目录下
这部分比较特殊, 五花八门。
推荐一个省时省力的方式: 把busybox当作bin直接编译到recovery中。

diff --git a/alps/build/core/Makefile b/alps/build/core/Makefile
index f812ea8..0e734a6 100644
--- a/alps/build/core/Makefile
+++ b/alps/build/core/Makefile
@@ -836,6 +836,8 @@ recovery_binary := $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery
 recovery_resources_common := $(call include-path-for, recovery)/res
 recovery_ramdisk_bthdr := $(PRODUCT_OUT)/ramdisk-recovery-bthdr.img
 
+recovery_busybox := $(TOPDIR)device/lcsh/lcsh6580_weg_sh_l/recovery_busybox.sh
+
 # Set recovery_density to the density bucket of the device.
 recovery_density := unknown
 ifneq (,$(PRODUCT_AAPT_PREF_CONFIG))
@@ -972,6 +974,8 @@ endif
        $(hide) cp -R $(TARGET_ROOT_OUT) $(TARGET_RECOVERY_OUT)
        @echo Modifying ramdisk contents...
        $(hide) rm -f $(TARGET_RECOVERY_ROOT_OUT)/init*.rc
+       @echo ---Busybox---
+       $(recovery_busybox) $(PRODUCT_OUT)
 ifeq ($(TARGET_USERIMAGES_USE_UBIFS),true)
        $(hide) cp -f $(recovery_ubiformat) $(TARGET_RECOVERY_ROOT_OUT)/sbin/ubiformat
 endif

recovery_busybox.sh

#!/bin/bash
PRODUCT_OUT=$1
cp -f device/lcsh/lcsh6580_weg_sh_l/busybox $PRODUCT_OUT/recovery/root/sbin/

修改 Init.rc

目标: 可以使用 adb 命令。

$ adb shell

原理:生成一个软连接 /system/bin/sh

在Init.rc 添加

# Begin Busybox
    # 1:
    mkdir /system
    mkdir /system/bin #不一定生效
    # 2:
    symlink /sbin/busybox /system/bin/sh
    # 3:
    symlink /sbin/busybox /sbin/cat
    symlink /sbin/busybox /sbin/ls
    symlink /sbin/busybox /sbin/echo
    symlink /sbin/busybox /sbin/pwd
# End

加入这几行命令之后就可以了。

1: 建立目录, 以便后面创建软连接使用

mkdir /system/bin 可能创建目录不成功, 这里需要想别的办法创建这个目录,否则后面的软连接不能生成出来。

2: 创建软连接, 为了 adb shell 做准备

3: (可选项) 建立一些常用的命令的软连接

如果没有 步骤3的话, 使用命令:

$ busybox ls

推荐阅读更多精彩内容