当调用adb启动服务器时,Linux系统冻结



命令adb start-server正在完全冻结我的系统,需要硬重置才能恢复。

这是Fedora 21(x86_64)的新安装。当系统冻结时,它是即时的。桌面停止响应,计算机不再接受ping请求,系统消息中也不会记录任何内容。

无论我是以root用户还是普通用户的身份运行adb,都会发生这种情况。当我运行命令时,它会显示:daemon not running. starting it now on port 5037并且冻结是立即的。它永远不会返回守护进程已启动的消息。

我安装了strace并运行:

# strace adb start-server

最后几行输出是:

socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(5037), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 ECONNREFUSED (Connection refused)
close(3)                                = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf75ef000
write(1, "* daemon not running. starting i"..., 53* daemon not running. starting it now on port 5037 *
) = 53
pipe([3, 4])                            = 0
readlink("/proc/1880/exe", "/home/jon/Android/Sdk/platform-t"..., 4095) = 40
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xf727c768) = 1881
close(4)                                = 0
read(3, 

无论我是否插入了USB设备,都会发生这种冻结。除了这个问题,电脑似乎还可以正常工作。

adb正在初始化的计算机上是否有可能导致此冻结的硬件?如果能提供有关如何解决此问题的建议,我将不胜感激。

这并不是一个真正的解决方案,因为冻结确实很难调试,但却是一种变通方法。我怀疑这个问题与内核版本有关。

我降级了安装的内核,adb运行良好,没有任何冻结。转到存储库并手动下载这些包:

 - kernel-3.17.4-301.fc21.x86_64.rpm
 - kernel-debug-devel-3.17.4-301.fc21.x86_64.rpm  
 - kernel-modules-extra-3.17.4-301.fc21.x86_64.rpm
 - kernel-core-3.17.4-301.fc21.x86_64.rpm  
 - kernel-modules-3.17.4-301.fc21.x86_64.rpm

使用命令rpm -ivh --force kernel-*重新启动计算机,并在grub显示时选择新内核。

我在Acer Aspire E17上也遇到了同样的问题,我没有找到确切的组件,但在使用UEFI bios时它非常完美,所以问题是他们在制作和测试Legacy bios时没有投入太多精力。

您可以毫不费力地在UEFI模式下安装Fedora。您不会修复bios失败问题。

安装Fedora UEFI

编辑:

我在我的联想E40笔记本电脑上仍然有这个问题,该笔记本电脑带有Arch Linux x86_64。当adb启动时,它会立即冻结机器。

从BIOS更改为UEFI引导并没有解决问题。

降级到内核版本3.16 LTS解决了这个问题。现在adb工作正常。现在它可以在BIOS和UEFI下工作,所以它与这些无关

我还尝试了4.4 LTS内核、后来的4.x内核、两个不同的5.0.13内核,以及所有这些内核上的adb冻结。

当我之前尝试过多次重新启动直到成功的解决方案时,它是在早期的4.x内核下。我不得不重新启动大约32-64次,直到它起作用。对于后来的4.x和5.x内核,此解决方案停止工作。我已经尝试在这些后来的内核上重新启动机器多达128次,但都没有成功。

现在adb在3.16 LTS内核下正常工作,我还没有尝试过其他3.x内核。

(这个内核似乎也能正确处理我笔记本电脑的ACPI功能,现在软关机和软重置工作正常。这些在4.x和5.x下都不工作。)

原始答案:

我也有这个问题(但在Arch Linux x86_64上)。我没能解决这个问题。

我注意到adb有时确实可以在不冻结的情况下工作,这取决于重新启动adb工作一次后,它将一直工作到下一次重新启动

因此,如果你重新启动几次,直到它工作,就可以正常使用它。

可能相关的讨论:4.0和更高版本的Linux内核中的USB驱动程序发生了什么变化?

最新更新