尝试通过TCP通过adb连接到Android设备时显示“错误:已关闭”

尝试通过TCP通过adb连接到Android设备时显示“错误:已关闭”,第1张

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

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

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

androID@ubuntu:~$setprop service.adb.tcp.port 5555androID@ubuntu:~$stop adbdandroID@ubuntu:~$start adbd

在Ubuntu主机上:

androID@ubuntu:~$adb connect 192.168.0.85:5555connected to 192.168.0.85:5555androID@ubuntu:~$adb shellerror: closedandroID@ubuntu:~$adb devicesList of devices attached192.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设备时显示“错误:已关闭”全部内容,希望文章能够帮你解决尝试通过TCP通过adb连接到Android设备时显示“错误:已关闭”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存