📌 一、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、安卓系统通常内置 netstat 命令,可查看端口监听状态:
# 查看所有端口的监听状态(包括5555)
netstat -tuln
# 过滤5555端口(更精准)
netstat -tuln | grep 55552、
❯ 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
小结: