SDK 内核调试指南
本文档介绍如何使用 CKLink 调试器配合 GDB 对 V861 SDK 的 Linux 内核进行调试,包括硬件连接、软件环境配置、调试会话操作等内容。
概述
调试工具简介
V861 SDK 内核调试采用「CKLink + GDB」的调试方案,下表帮助您快速了解该方案的特点:
| 工具 | 功能概述 | 适用场景 |
|---|---|---|
| CKLink | 平头哥 RISC-V 调试器,内置 GDB Server | 内核调试、U-Boot 调试、裸机程序调试 |
| GDB | GNU 调试器,支持断点、单步、变量查看 | 命令行调试、脚本自动化 |
| VSCode | 图形化调试环境(可选) | 大型项目调试、可视化操作 |
调试架构
┌─────────────────┐ ┌─────────────────┐
│ PC Side │ │ Board Side │
│ │ │ │
│ ┌───────────┐ │ USB/Ethernet │ ┌───────────┐ │
│ │ GDB │◄─┼────────────────────┼──│ CKLink │ │
│ │ │ │ │ │ Server │ │
│ └───────────┘ │ │ └─────┬─────┘ │
│ │ │ │JTAG │
│ vmlinux │ │ ▼ │
│ Source Code │ │ ┌───────────┐ │
│ │ │ │ C907 │ │
│ │ │ │ (SoC) │ │
│ │ │ └───────────┘ │
└─────────────────┘ └─────────────────┘
CKLink 通过 JTAG 接口连接目标芯片,PC 端的 GDB 通过网络端口与 CKLink 内置的 GDB Server 通信,实现对目标芯片的调试。
硬件要求
| 项目 | 要求 |
|---|---|
| 调试器 | CKLink 调试器(平头哥 T-Head 出品) |
| 开发板 | V861-BGA_PER1 开发板(或其他 V861 系列开发板) |
| 连接线 | JTAG 连接线(10Pin 或 20Pin) |
| PC | Windows 或 Linux 系统 |
软件要求
| 软件 | 说明 |
|---|---|
| XuanTie Debug Server | 平头哥调试服务器软件(DebugServerConsole) |
| RISC-V GDB | RISC-V 架构 GDB 调试器(SDK 工具链自带) |
| 内核源码 | 带调试信息的内核源码 |
CKLink 调试器简介
什么是 CKLink?
CKLink 是平头哥(T-Head)推出的 RISC-V 调试器,专为调试 RISC-V 架构处理器设计。它具有以下特点:
- 原生 RISC-V 支持:完整支持 RISC-V 调试规范
- 内置 GDB Server:无需额外配置,直接与 GDB 对接
- 多核调试支持:支持多核处理器的同步调试
- 多种连接方式:支持 USB 和以太网连接
CKLink 型号与规格
| 型号 | 接口 | 连接方式 | 适用场景 |
|---|---|---|---|
| CKLink Lite | JTAG/SWD | USB | 个人开发、便携调试 |
| CKLink Pro | JTAG/SWD | USB/以太网 | 团队开发、远程调试 |
工作原理
CKLink 的核心是一个协议转换器,将 GDB 的调试命令转换为 JTAG 协议信号:
GDB Commands ──► GDB Server (CKLink) ──► JTAG Protocol ──► Target CPU
│
▼
TCP/IP Port
(default: 2241)
硬件连接
JTAG 接口位置
V861-BGA_PER1 开发板的 JTAG 调试接口位于开发板正面,编号 26。全志平台也支持将 TF 卡口复用为 JTAG 功能,也可以用卡口作为调试口使用。

TF 卡口 JTAG 复用功能示例

接线说明
CKLink 与开发板 JTAG 接口的连接关系如下:
| CKLink 信号 | JTAG 信号 | 说明 |
|---|---|---|
| TCK | TCK | 时钟信号 |
| TMS | TMS | 测试模式选择 |
| TDI | TDI | 测试数据输入 |
| TDO | TDO | 测试数据输出 |
| GND | GND | 地线 |
| VCC | VCC | 目标板电源检测(可选) |
| RST | RST | 复位信号(可选) |
注意事项
- 连接前请确保开发板处于断电状态
- 确认 JTAG 接口线序正确,避免接反损坏芯片
- VCC 信号仅用于电平检测,不可用于供电
:::
连接示意与配置
在这里我们使用 JTAG 连接 PH 口或者连接 PF 口,
PH 口连接示意图

PH 口配置方式
C907 JTAG 口
- 配置 BOOT0 使一开始就切换到 PH 作为 C907 JTAG,配置
device/config/chips/{chip}/configs/{board}/sys_config.fex
[jtag_para]
jtag_enable = 1
jtag_ms = port:PH9<7><default><default><default>
jtag_ck = port:PH10<7><default><default><default>
jtag_do = port:PH11<7><default><default><default>
jtag_di = port:PH12<7><default><default><default>
- 如果内核启动了有驱动切换了,需要强制切回来(这里为了方便将PH CFG2全切 mux7,也可以先读出来再把有需要的切到对应的 mux)
echo 0x02000154 0x77777777 > /sys/class/sunxi_dump/write
E907 JTAG 口
- 配置 BOOT0 使一开始就切换到 PH 作为 E907 JTAG,配置
device/config/chips/{chip}/configs/{board}/sys_config.fex
[jtag_para]
jtag_enable = 1
jtag_ms = port:PH9<2><default><default><default>
jtag_ck = port:PH10<2><default><default><default>
jtag_do = port:PH11<2><default><default><default>
jtag_di = port:PH12<2><default><default><default>
- 如果内核启动了有驱动切换了,需要强制切回来(这里为了方便将PH CFG2全切 mux2,也可以先读出来再把有需要的切到对应的 mux)
echo 0x02000154 0x22222222 > /sys/class/sunxi_dump/write
PF 连接示意图

PF 口配置方式
C907 JTAG 口
- 配置 BOOT0 使一开始就切换到 PF 作为 C907 JTAG,配置
device/config/chips/{chip}/configs/{board}/sys_config.fex
[jtag_para]
jtag_enable = 1
jtag_ms = port:PF0<6><default><default><default>
jtag_ck = port:PF1<6><default><default><default>
jtag_do = port:PF3<6><default><default><default>
jtag_di = port:PF5<6><default><default><default>
- 如果内核启动了有驱动切换了,需要强制切回来(这里为了方便将PF全切 mux6,也可以先读出来再把有需要的切到对应的 mux)
echo 0x020000f0 0x66666666 > /sys/class/sunxi_dump/write
E907 JTAG 口
- 配置 BOOT0 使一开始就切换到 PF 作为 E907 JTAG,配置
device/config/chips/{chip}/configs/{board}/sys_config.fex
[jtag_para]
jtag_enable = 1
jtag_ms = port:PF0<3><default><default><default>
jtag_ck = port:PF1<3><default><default><default>
jtag_do = port:PF3<3><default><default><default>
jtag_di = port:PF5<3><default><default><default>
- 如果内核启动了有驱动切换了,需要强制切回来(这里为了方便将PF全切 mux3,也可以先读出来再把有需要的切到对应的 mux)
echo 0x020000f0 0x33333333 > /sys/class/sunxi_dump/write
软件环境配置
安装 XuanTie Debug Server
Linux 环境
(1)获取安装包
从玄铁官网下载安装包:玄铁官网下载
安装包中包含:
XuanTie-DebugServer-linux-i386-*.sh.tar.gz:32位系统XuanTie-DebugServer-linux-x86_64-*.sh.tar.gz:64位系统
(2)安装步骤
# 解压安装包
tar -xzf XuanTie-DebugServer-linux-x86_64-*.sh.tar.gz
# 添加执行权限
chmod +x XuanTie-DebugServer-linux-*.sh
# 执行安装(需要 sudo 权限)
sudo ./XuanTie-DebugServer-linux-*.sh -i
(3)选择安装路径
安装过程会提示设置安装路径:
- 默认路径:直接按回车,安装到
/usr/bin/ - 自定义路径:输入绝对路径后确认
(4)验证安装
DebugServerConsole -v
Windows 环境
(1)获取安装包
从玄铁官网下载 XuanTie-DebugServer-windows*.zip
(2)安装步骤
- 解压 zip 文件
- 双击运行
Setup.exe - 按向导完成安装(建议勾选 ICE Driver 和 Tutorial)
(3)运行程序
- GUI 版:
DebugServer.exe - Console 版:
DebugServerConsole.exe
XuanTie Debug Server 运行参数
Console 版 Debug Server 通过启动参数配置运行时行为。常用参数如下:
| 参数 | 说明 | 默认值 |
|---|---|---|
-setclk iceclk | 设定 JTAG 时钟频率,默认单位 MHz,支持 kHz | 12 |
-port port | 设定 socket 通信端口 | 2241 |
-arch tcsky/riscv/auto | 选择调试架构 | auto |
-list-ice | 列出当前连接的 ICE 设备 | - |
-select-ice serial_number | 指定 ICE 串号连接 | - |
-prereset | 连接前执行 nreset 操作 | 不执行 |
-v/-version | 查看版本号 | - |
-h/--help | 查看帮助信息 | - |
参数说明
- JTAG 时钟频率上限:CKLink-Pro/CKLink-V1 为 24MHz,CKLink-Lite 为 2500kHz
-arch auto会自动探测调试架构(RISC-V DM 或 XuanTie HAD)
:::
安装 GDB 调试工具
V861 SDK 已自带 RISC-V GDB,位于工具链目录:
# 内核编译工具链
out/toolchain/Xuantie-900-gcc-linux-6.6.36-glibc-x86_64-V3.3.0-20260204/bin
内核编译配置
为了使内核支持调试,需要开启以下配置选项:
开启内核调试信息
make kernel_menuconfig
导航到以下路径并勾选:
Kernel hacking --->
Compile-time checks and compiler options --->
[*] Debug information
[*] Rely on the toolchain's implicit default DWARF version
[*] Reduce debugging information (可选项,减小符号表大小)

相关配置选项说明
| 配置项 | 说明 |
|---|---|
CONFIG_DEBUG_INFO | 编译内核时生成调试信息 |
CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT | 使用工具链提供的 DWARF 格式 |
CONFIG_DEBUG_INFO_REDUCED | 精简调试信息,减小内核体积 |
重新编译内核
# 编译内核
make -j8
# 生成的带调试信息的内核文件
# vmlinux: 带调试符号的内核映像
# System.map: 内核符号表
编译完成后,vmlinux 文件位于内核源码根目录,用于 GDB 加载符号表。