android adbd 服务异常,尝试通过TCP通过adb连接到Android设备时显示“错误:已关闭”...

我正在ARMv7开发板上构建Android系统.由于某种原因,我想使用“ adb shell”从PC上操纵系统.由于Android系统使用NFS服务器作为其根文件系统,因此开发板和PC通过以太网连接.这是我尝试过的方法(我在Android设备上具有root用户访问权限):

在Android设备上(通过带腻子的串行端口访问):

android@ubuntu:~$setprop service.adb.tcp.port 5555

android@ubuntu:~$stop adbd

android@ubuntu:~$start adbd

在Ubuntu主机上:

android@ubuntu:~$adb connect 192.168.0.85:5555

connected to 192.168.0.85:5555

android@ubuntu:~$adb shell

error: closed

android@ubuntu:~$adb devices

List of devices attached

192.168.0.85:5555 device

如消息所示,通过adb的连接似乎成功(已连接到…),但是我无法对其进行“ adb shell”操作.最奇怪的是,我仍然可以看到通过“ adb设备”连接的设备.

我试图杀死adb服务器并重新启动它,但是它也不起作用.

解决方法:

我研究了adb的源代码,使用gdb进行了调试,最后找到了根本原因.

基本上,为了响应主机命令adb shell,adbd(在Android设备上运行的守护程序)应打开一个伪终端,并派生另一个运行shell的子进程.这些在system / core / adb / services.c中的create_subproc_pty函数中实现:

static int create_subproc_pty(const char *cmd, const char *arg0, const char *arg1, pid_t *pid)

{

....

int ptm;

ptm = unix_open("/dev/ptmx", O_RDWR | O_CLOEXEC); // | O_NOCTTY);

if(ptm < 0){

printf("[ cannot open /dev/ptmx - %s ]\n",strerror(errno));

return -1;

}

....

*pid = fork();

if(*pid < 0) {

printf("- fork failed: %s -\n", strerror(errno));

adb_close(ptm);

return -1;

}

....

}

而且我在开发板上发现unix_open函数失败.这是因为PTY驱动程序未内置在内核中,因此在系统上找不到设备/ dev / ptmx.

要解决此问题,只需选择Character Devices-Unix98 PTY驱动程序并重建内核,然后adb shell将起作用.

标签:tcp,adb,android

来源: https://codeday.me/bug/20191120/2044887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值