📌 一、ADB连接开发板失败,报错

原因:

adbd 没有启用 TCP 模式(即未监听 5555 端口)

这个错误 由于目标计算机积极拒绝,无法连接。(10061) 是 Windows 报的 socket 连接失败,说明Win10 设备能访问目标 IP,但是对方没有在监听 adb(5555)端口


排查与解决:

1、通过串口 logcat 排查步骤

1.1、 确认设备已打开 adb over TCP/IP

需要在串口终端中,进入 Android shell,执行以下命令:

getprop service.adb.tcp.port

如果结果不是 5555,说明 ADB 没启用 TCP 模式。

可以执行:

setprop service.adb.tcp.port 5555
stop adbd
start adbd

然后确认:

netstat -an | grep 5555

是否有:

tcp  0  0  0.0.0.0:5555  0.0.0.0:*  LISTEN
1.2、 查看 logcat 日志

串口进入 shell 后执行:

logcat | grep -i adbd

观察是否有以下类似日志:

  • adbd listening on port 5555:正常

  • adbd cannot bind to port 5555:有可能是端口冲突或 SELinux 阻止

  • adbd started without authentication:正常,但看是否开启了验证(认证失败也连不上)

1.3、 确认系统防火墙或 selinux 是否拦截

执行:

getenforce
  • Enforcing 状态可能会阻止 adb over tcp

  • 临时关闭:

setenforce 0

检查防火墙:

iptables -L -n

确认没有 DROP 规则阻断 5555 端口。


2、PC 端排查思路(Win10)

2.1、 确认端口未被防火墙阻断
  • 临时关闭防火墙测试:控制面板 > 防火墙 > 关闭防火墙

  • 或在 cmd 中:

telnet 192.168.0.71 5555

如果显示“连接失败”,说明不是 Windows 问题,是安卓端根本没监听 5555。

2.2、 adb 是否连接了别的设备冲突

可以清理一下:

adb kill-server
adb start-server
adb devices

3、Android 设备开启 adb over tcp 永久方法

如果每次重启都要 setprop,可以添加到 init.rc 脚本或开机启动脚本中。

例如:

# /system/etc/init.rc 或 /vendor/etc/init.rc
setprop service.adb.tcp.port 5555
start adbd

AOSP对应修改$PROJECT_TOP/system/core/rootdir/init.rc

@@ -983,6 +983,9 @@ on property:sys.boot_completed=1
     # Setup per_boot directory so other .rc could start to use it on boot_completed
     exec - system system -- /bin/rm -rf /data/per_boot
     mkdir /data/per_boot 0700 system system encryption=Require key=per_boot_ref
+    setprop service.adb.tcp.port 5555
+    stop adbd
+    start adbd
 
 # system server cannot write to /proc/sys files,
 # and chown/chmod does not work for /proc/sys/ entries.

并重新编译 Android+打包update.img即可。

小结

步骤

操作

说明

1

getprop service.adb.tcp.port

查看是否已启用 TCP 模式

2

setprop + stop/start adbd

手动启用 adb over TCP

3

netstat -an

看是否监听 5555

4

`logcat

grep adbd`

5

getenforce / setenforce 0

临时关闭 SELinux

6

PC 端 telnet 测试连接

判断是否能连通

7

持久化设置

修改 init.rc 或加入开机脚本

📁 二、附言:

1、安卓系统通常内置 netstat 命令,可查看端口监听状态:

# 查看所有端口的监听状态(包括5555)
netstat -tuln

# 过滤5555端口(更精准)
netstat -tuln | grep 5555

2、

❯ find . -name "init.rc"
./bootable/recovery/etc/init.rc
./out/target/product/rk3566_r/recovery/root/system/etc/init/hw/init.rc
./out/target/product/rk3566_r/obj/ETC/init.rc_intermediates/init.rc
./out/target/product/rk3566_r/obj/ETC/com.android.adbd.init.rc.com.android.adbd_intermediates/init.rc
./out/target/product/rk3566_r/obj/ETC/com.android.os.statsd.init.rc.com.android.os.statsd_intermediates/init.rc
./out/target/product/rk3566_r/obj/ETC/com.android.media.swcodec-mediaswcodec.rc.com.android.media.swcodec_intermediates/init.rc
./out/target/product/rk3566_r/system/apex/com.android.adbd/etc/init.rc
./out/target/product/rk3566_r/system/apex/com.android.media.swcodec/etc/init.rc
./out/target/product/rk3566_r/system/apex/com.android.os.statsd/etc/init.rc
./out/target/product/rk3566_r/system/etc/init/hw/init.rc
./out/soong/.intermediates/bootable/recovery/init_recovery.rc/android_recovery_arm64_armv8-a_cortex-a55/init.rc
./out/soong/.intermediates/frameworks/av/apex/com.android.media.swcodec-mediaswcodec.rc/android_arm64_armv8-a_cortex-a55/init.rc
./out/soong/.intermediates/frameworks/base/apex/statsd/com.android.os.statsd.init.rc/android_arm64_armv8-a_cortex-a55/init.rc
./out/soong/.intermediates/system/core/rootdir/init.rc
./out/soong/.intermediates/system/core/rootdir/init.rc/android_arm64_armv8-a_cortex-a55/init.rc
./out/soong/.intermediates/system/core/adb/apex/com.android.adbd.init.rc/android_arm64_armv8-a_cortex-a55/init.rc
./system/apex/tests/testdata/init.rc
./system/core/rootdir/init.rc
./device/rockchip/common/recovery/etc/init.rc

上面除了out之外的init.rc 文件,全部属于 Android 用户空间,并不属于 U-Boot 或内核。

用途不同,下面是它们的归属与作用:


2.1、./bootable/recovery/etc/init.rc

  • 属于:Android Recovery 模式(recovery 分区)

  • 作用:当设备进入 Recovery 模式(比如刷机、wipe data 时)会加载这个 init.rc

  • 对正常启动的系统 无效,只在 Recovery 模式生效


2.2、./system/apex/tests/testdata/init.rc

  • 属于:Android APEX 测试资源

  • 作用:仅用于 CTS 或 APEX 模块测试,不会被打包进最终系统镜像

  • 无效修改:改它没有任何作用,除非做 APEX 测试


2.3、./system/core/rootdir/init.rc 最关键的那个!

  • 属于:Android 主系统的启动脚本,会被打包进 boot.img 中的 ramdisk

  • 作用:控制系统启动顺序,包括 adbd 启动、属性设置、服务挂载等


2.4、./device/rockchip/common/recovery/etc/init.rc

  • 属于:Rockchip 的 Recovery 模式(recovery.img)

  • 作用:这是设备厂商定制的 recovery 分区的 init.rc,只在进入 recovery 模式时使用

  • 和正常 Android 启动无关,修改它不能让系统默认启用 adb over TCP


小结:

文件路径

属于

是否用于正常启动

说明

system/core/rootdir/init.rc

Android 主系统

修改这个能改变系统启动行为

bootable/recovery/etc/init.rc

Recovery 模式

用于 recovery 模式

device/rockchip/common/recovery/etc/init.rc

Recovery 模式 (厂商定制)

用于 recovery 模式

system/apex/tests/testdata/init.rc

APEX 测试

无实际作用