我正在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设备时显示“错误:已关闭”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)