当缺少/ system / bin / sh时,如何在android上获得有效的adb shell?

时间:2014-02-11 14:11:14

标签: android shell adb

我正在尝试从Measy U2C HDMI棒的源头构建Android Jellybean。我已经设法构建并安装所有分区(启动,内核,misc,恢复,系统......)。我遇到的问题是系统分区似乎没有安装。我跑的时候

adb ls /system

我得到以下输出:

000041ed 00000400 51301410 .
000041c0 00000800 00000003 lost+found
000041ed 00000000 00000001 ..

我想将shell添加到设备中并尝试调试系统分区未安装的原因,但adb希望在/ system / bin / sh中有一个可用的shell。

$ adb shell
- exec '/system/bin/sh' failed: No such file or directory (2) -

我的问题是,如何让adb在别处查找shell命令,以便我可以使用它?或者是否有另一种远程进入设备并进行调试的方法? / sbin / busybox上有一个busybox安装,所以如果我能以某种方式调用它,我可以解决这个问题。

1 个答案:

答案 0 :(得分:3)

“SHELL_COMMAND”似乎是adb / services.c中的硬编码,其非正式副本可以浏览

https://github.com/android/platform_system_core/blob/master/adb/services.c

鉴于您正在从源代码构建,您应该能够更改此内容。但是既然你想把它指向一个较短的路径,你也可以编辑二进制文件并向上移动终止空值。

调查问题的另一种方法可能是在启动到恢复分区后查看是否可以获得有效的adb shell,并尝试在那里手动挂载有问题的系统分区以查看导致的错误。

另一个想法是在启动脚本中添加一些内容,启动备用shell,监听可以使用adb转发套接字的内容 - 我不会想到明显的原因设置adb转发将取决于设备端shell,但我还没有通过实验或检查代码来验证。

如果你想变得非常聪明,我相信你可以在 root 文件系统上创建一个包含sh副本的/ system / bin。我的回忆是,您可以在非空目录上挂载文件系统 - 不确定是否存在打开该目录的文件描述符的问题,例如运行sh本身,但是您的挂载无论如何都会失败,您可以尝试在其他地方手动安装以调试该问题。