ADB 在嵌入式 Linux 系统调试中的应用
ADB 在嵌入式 Linux 系统调试中的应用
1. 概述
ADB下载链接
ADB官方概述
ADB 全称 Android Debug Bridge,直译过来就是 Android 调试桥, 它是一个通用的命令行工具。Adb 作为 Android设备与 PC 端连接的一个桥梁, 它可以让开发者通过网络或 USB 与Android设备进行通信, 其核心功能是建立 主机与目标设备之间的高效通信通道。
随着 adb的普及,不仅仅是Android 设备,在嵌入式开发中,很多 Linux 设备也同样支持 adb 调试,例如 Rockchip 平台 Linux 设备。
ADB在实际开发中被广泛用于:
-
系统调试与维护
-
文件传输与部署
-
应用远程运行与调试
-
端口转发和网络诊断
相较于传统的串口、SSH 等方式,ADB 具有 部署简单、功能集中、跨平台支持良好 等优势,尤其在 Android 系统衍生的嵌入式平台中表现突出。
2. 架构原理
ADB 的架构基于 客户端-服务器-守护进程 (Client-Server-Daemon) 模式。
整体架构由三部分组成:
-
ADB Client
-
位于开发主机,主要由
adb
命令行工具实现。 -
负责接收开发者输入的调试指令,并通过本地 socket 与 ADB Server 交互。
-
-
ADB Server
-
运行在开发主机后台,默认监听
localhost:5037
。 -
负责管理主机与多个设备的连接,并将 Client 的请求转发至对应设备。
-
同时负责 USB/IP 连接的建立与维持。
-
-
ADB Daemon (adbd)
-
运行在目标嵌入式 Linux 设备上。
-
接收来自 ADB Server 的指令,调用底层接口执行,并返回结果。
-
数据流向如下:
[adb client] ⇆ [adb server:5037] ⇆ [USB/TCP/IP] ⇆ [adbd on device]
这种设计保证了多设备并行调试的能力,也使得开发者可以在不同的传输层(USB 或 TCP/IP)下保持统一的操作接口。
3. 在嵌入式 Linux 上的实现
3.1 获取与编译 adbd
在嵌入式 Linux 平台上运行 ADB 需要目标设备具备 adbd
守护进程。实现方式主要有两种:
-
直接使用 AOSP 提供的 adbd
-
从 Android Open Source Project 源码中提取并交叉编译。
-
适合资源相对充足的嵌入式设备。
-
-
使用轻量化移植版本
-
例如社区维护的 android-tools,提供了裁剪后的
adbd
与adb
。 -
适合资源受限的 IoT 或工业控制类设备。
-
3.2 启动与连接
-
设备端启动 adbd
./adbd &
通常以后台守护进程方式运行。
-
主机端检测设备
adb devices
可通过 USB 或 TCP/IP 建立连接,例如:
adb connect <device-ip>:5555
3.3 权限与配置
-
主机端 (Linux):
需配置udev
规则以允许非 root 用户访问 USB 设备。 -
设备端:
若使用 TCP 模式,需要确保防火墙允许 5555 端口通信,并确认adbd
运行在合适权限下(通常为 root 或具有 shell 权限)。
4. 常用调试命令
4.1 设备管理
adb devices # 列出已连接设备
adb connect <ip:port> # 通过 TCP/IP 连接设备
adb disconnect <ip> # 断开 TCP/IP 连接
4.2 远程 Shell
adb shell # 进入交互式 shell
adb shell <command> # 执行单条命令
4.3 文件传输
adb push local remote # 主机 → 设备
adb pull remote local # 设备 → 主机
4.4 端口映射
adb forward tcp:6000 tcp:6000 # 主机端口映射至设备
adb reverse tcp:7000 tcp:7000 # 设备端口反向映射至主机
4.5 系统日志
adb logcat # 输出系统日志 (需设备支持)
adb shell dmesg # 查看内核日志
5. 应用场景
-
固件与应用部署
使用adb push
快速传输可执行文件或脚本,无需额外配置 FTP/TFTP 服务。 -
远程调试
结合adb shell gdbserver
与端口转发功能,可以在主机上进行交叉调试。 -
系统诊断
借助adb shell
与adb logcat/dmesg
快速获取系统运行状态和日志信息。 -
网络受限场景
在没有 SSH 服务或串口接口的设备中,ADB 通过 USB 即可完成绝大多数调试任务。