SDK 应用调试指南
SDK 烧录到开发板之后需要进行开发调试,本文将介绍在开发调试中常用的工具,方便开发流程。一般开发环境如下图所示,PC 与开发板通过串口线与 USB 线连接。通过串口线访问开发板控制终端,通过 USB 执行下载烧录、ADB 等功能。
概述
调试工具简介
V861 SDK 提供了多种调试工具,各有特点和适用场景。下表帮助您快速选择合适的调试工具:
| 工具 | 功能概述 | 学习难度 | 推荐使用场景 |
|---|---|---|---|
| ADB | 命令行交互、文件传输、远程执行 | ★☆☆ 低 | 日常开发、快速验证、简单调试 |
| GDB | 断点调试、单步执行、变量查看 | ★★★ 高 | 深入分析程序逻辑、复杂问题定位 |
| VSCode | 图形化调试环境、断点、变量监视 | ★★☆ 中 | 大型项目开发、日常开发首选 |
| Coredump | 事后分析崩溃问题、内存转储 | ★★☆ 中 | 无法实时调试的场景、崩溃分析 |
章节导航
- 初次使用:建议从「使用 ADB 辅助调试」开始,熟悉基本的命令行操作
- 深入调试:阅读「使用 GDB 远程调试」,掌握命令行调试技巧
- 提升效率:配置「使用 VSCode 开发调试」,享受图形化调试体验
- 崩溃分析:学习「使用 Coredump 文件调试」,处理无法实时调试的问题
使用 ADB 辅助调试
工具简介
ADB(Android Debug Bridge)原本是 Android 平台的调试工具,V861 SDK 将其移植到了 Linux 平台。通过 ADB,您可以:
- 远程执行命令:无需串口,直接在 PC 上执行开发板命令
- 文件传输:方便地在 PC 和开发板之间传输文件
- 端口转发:为 GDB 等工具提供网络通道
- 系统控制:重启设备、进入烧写模式等
前置条件
执行 m menuconfig,勾选 ADB 软件包:
Allwinner --->
USB --->
<*> adbd................................................. adbd for Tina Linux

环境搭建
在使用 ADB 之前,需要在 PC 上搭建 ADB 环境。
Windows 环境:
- 下载 ADB 工具包:SDK 平台工具版本说明
- 解压到任意目录(如
C:\platform-tools) - 将该目录添加到系统环境变量 PATH 中
- 打开命令提示符,输入
adb version验证安装
Linux 环境:
# Ubuntu/Debian
sudo apt-get install android-tools-adb
# 验证安装
adb version
更多详细信息请参考 Android 调试桥官方文档。
连接方式
USB 连接
USB 连接是最简单、最稳定的连接方式。
步骤:
- 开发板烧录固件后,使用 USB 线连接 PC 和开发板
- 在 PC 命令行中检查连接状态:
adb devices
- 看到设备列表后,进入 ADB 控制台:
adb shell

网络连接
网络连接适用于开发板与 PC 距离较远,或需要无线调试的场景。
步骤:
(1)开发板连接网络
开发板通过串口连接,输入命令搜索 Wi-Fi 网络:
wifi -s

搜索到目标网络后,连接:
wifi -c <SSID> <密码>
连接成功后,使用 ifconfig 查看分配的 IP 地址:

(2)配置开发板无线 ADB
设置 ADB 监听端口(默认使用 5555):
export ADB_TRANSPORT_PORT=5555
重启 ADB 服务:
kill $(pgrep adbd) && adbd -D &
(3)PC 端连接
使用 IP 地址和端口连接:
adb connect <IP>:5555

(4)默认开启网络 ADB(可选)
如需开机自动启动网络 ADB,修改文件 openwrt/openwrt/package/subpackage/allwinner/usb/adbd/adbd.init,取消 ADB_TRANSPORT_PORT 的注释:

常用命令详解
设备管理
| 命令 | 说明 | 示例 |
|---|---|---|
adb devices | 列出已连接设备 | adb devices |
adb connect <ip>:<port> | 网络连接设备 | adb connect 192.168.1.100:5555 |
adb disconnect | 断开网络连接 | adb disconnect |
adb kill-server | 终止 ADB 服务 | adb kill-server |
adb start-server | 启动 ADB 服务 | adb start-server |
文件传输
| 命令 | 说明 | 示例 |
|---|---|---|
adb push <local> <remote> | 推送文件到设备 | adb push sample_virvi /mnt/extsd |
adb pull <remote> <local> | 从设备拉取文件 | adb pull /mnt/extsd/log.txt ./ |
示例:推送可执行文件和配置文件到开发板
adb push sample_virvi /mnt/extsd
adb push sample_virvi.conf /mnt/extsd
远程执行命令
| 命令 | 说明 | 示例 |
|---|---|---|
adb shell | 进入交互式 Shell | adb shell |
adb shell <command> | 执行单条命令 | adb shell ls /mnt/extsd |
示例:查看开发板文件列表
adb shell ls -la /mnt/extsd
系统控制
| 命令 | 说明 | 示例 |
|---|---|---|
adb reboot | 重启设备 | adb reboot |
adb reboot efex | 进入烧写模式 | adb reboot efex |
adb reboot recovery | 进入恢复模式 | adb reboot recovery |
端口转发
| 命令 | 说明 | 示例 |
|---|---|---|
adb forward tcp:<local> tcp:<remote> | 端口转发 | adb forward tcp:2241 tcp:2241 |
常见问题排查
Q: adb devices 看不到设备?
可能原因及解决方案:
-
USB 线问题:更换 USB 线或换一个 USB 接口
-
驱动问题(Windows):安装 ADB 驱动,或使用「设备管理器」手动安装驱动
-
ADB 服务问题:尝试重启 ADB 服务
adb kill-server
adb start-server
adb devices -
开发板 ADB 未启动:检查开发板是否正确烧录固件,ADB 服务是否运行
Q: 网络连接失败?
可能原因及解决方案:
- IP 地址错误:确认开发板 IP 地址正确,使用
ifconfig验证 - 端口未开放:确认开发板已执行
export ADB_TRANSPORT_PORT=5555并重启 adbd - 网络不通:使用
ping测试网络连通性 - 防火墙阻止:检查 PC 或网络防火墙设置
Q: 权限被拒绝?
解决方案:
Linux 环境下可能需要配置 udev 规则:
# 创建 udev 规则文件
sudo vim /etc/udev/rules.d/51-android.rules
# 添加以下内容(vendor ID 根据实际情况修改)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666"
# 重载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
使用远程 GDB 辅助调试
GDB 简介
什么是 GDB?
GDB(GNU Debugger)是 GNU 项目开发的调试器,支持多种编程语言(C/C++、Go、Rust 等)。它可以:
- 启动程序并指定任何可能影响其行为的参数
- 在指定条件下使程序停止
- 检查程序停止时发生了什么
- 修改程序中的内容以便纠正错误
为什么嵌入式需要远程调试?
在嵌入式开发中,目标设备(开发板)资源有限:
- 内存有限:无法运行完整的 GDB
- 存储有限:无法存储调试符号信息
- 性能受限:调试会严重影响系统性能
因此,采用「GDB Server + GDB Client」的架构:
┌─────────────────┐ ┌─────────────────┐
│ PC Side │ │ Board Side │
│ │ │ │
│ ┌───────────┐ │ Network │ ┌───────────┐ │
│ │ GDB │◄─┼────────────────────┼──│ GDB Server│ │
│ │ (Client) │ │ │ │ │ │
│ └───────────┘ │ │ └───────────┘ │
│ │ │ │ │
│ Debug Symbols │ │ Target Program │
│ Source Code │ │ │
└─────────────────┘ └─────────────────┘
GDB Server 运行在开发板上,体积小、资源占用少;GDB Client 运行在 PC 上,拥有完整的调试能力。